当前位置: 首页 > 程序语言 >matlab函数调用不可赋值

matlab函数调用不可赋值

作者 zw12332111
来源: 小木虫 200 4 举报帖子
+关注

设计的function,调用fu0(800)时得到结果为:
>> c=fu0(800)

c =

23107197116.874122942902443913907*k*s^b - 18.224563066100490240746478103187*k*s^b*(1267965000.0*exp(-0.03404*t) - 49987.0*exp(-2.966*t)) + 25705.229999999999563442543148994
结果中并没有把800赋值给函数计算,不知道什么问题,请各位高手帮忙看下是什么问题,感谢了。


fuo函数为
function y=fu0(t)
syms k s b y(t);
y = vpa(dsolve(diff(y,t)==k*s^b*(786600000*exp(-0.03404*t)-2702000*exp(-2.966*t)),y(0)==25705.23));
end 返回小木虫查看更多

今日热帖
  • 精华评论
  • somomo91

    这个是fuo函数里面转换问题

    syms  y(t) 会直接把 t 也转换成 sym , 取代 前面的 赋值,比如  t=800
    所以,你需要添加一个变量,
    最后 用 subs 来运行

    t0 = t;
    syms k s b y(t);
    y = vpa(dsolve(diff(y,t)==k*s^b*(786600000*exp(-0.03404*t)-2702000*exp(-2.966*t)),y(0)==25705.23));
    t = t0;
    subs(y)

  • zw12332111

    引用回帖:
    2楼: Originally posted by somomo91 at 2017-12-30 08:49:48
    这个是fuo函数里面转换问题

    syms  y(t) 会直接把 t 也转换成 sym , 取代 前面的 赋值,比如  t=800
    所以,你需要添加一个变量,
    最后 用 subs 来运行

    t0 = t;
    syms k s b y(t);
    y = vpa(dsolve(diff(y,t) ...

    大神解释的对!但是修改后还是不能赋值计算,之后修改如下:
    function y= fu0(x)
    syms y(t) k s b;
    y=vpa(dsolve(diff(y,t)==k*s^b*(786600000*exp(-0.03404*t)-2702000*exp(-2.966*t)),y(0)==25705.23));
    y=subs(y,t,x);
    end
    就可以了,再次感谢

  • somomo91

    引用回帖:
    3楼: Originally posted by zw12332111 at 2017-12-30 14:04:39
    大神解释的对!但是修改后还是不能赋值计算,之后修改如下:
    function y= fu0(x)
    syms y(t) k s b;
    y=vpa(dsolve(diff(y,t)==k*s^b*(786600000*exp(-0.03404*t)-2702000*exp(-2.966*t)),y(0)==25705.23));
    y=s ...

    嗯,这里其实就是一个变量调用,和 函数执行 的问题
    上面我例子,我没在 function 里面测试,是主程序,所有的变量对于 subs 是可见的,
    t = t0; 会清除上面对 t 是 sym 的声明,所以没有问题
    但是到了function 里面,就不同了,就会出问题

猜你喜欢