我想在Matlab中声明一个非线性复杂函数,所以我写了这个:
>> syms x
>> f=inline((3/2)*(7.02^2))-(2*18*x*((1-(x/18))*(1-(exp(-18/x)))))
但它不起作用并返回此错误:
??? Error using ==> inline.inline at 47
Input must be a string.
如何声明它以便我可以将它用作循环内的函数?
我想以数字方式找到这个函数的根,所以我首先需要声明它,以便我可以在循环中使用它。
答案 0 :(得分:1)
您的括号出现问题,需要添加单引号:
>>f=inline('((3/2)*(7.02^2))-(2*18*x*((1-(x/18))))*(1-(exp(-18/x)))')
答案 1 :(得分:0)
首先,您应该了解operator precedence,这样您就可以避免许多令人困惑的括号。
其次,正如大多数其他人在这里提到的那样,inline
很慢,不适合这个目的。你最好不要使用(以及如何正确使用)匿名函数,a.k.a。函数句柄。
第三,如果你想找到这个函数的根源,你最好使用专门用于此目的的经过广泛测试的Matlab函数,而不是设计&实现自己的版本:
>> f = @(x) 3/2*7.02^2 - 2*18*x.*(1-x/18).*(1-exp(-18./x));
>> root1 = fzero(f, 14)
root1 =
1.440303362822718e+01
>> root2 = fzero(f, 2.5)
root2 =
2.365138420421266e+00
>> root3 = fzero(f, 0) %# (if you're into that kind of perversion)
root3 =
0
我通过从-100:100
然后unique
随机测试结果来找到初始值。这绝不是找到所有根源的有力方法,但我相信你可以提出更好的东西(无论如何,解决问题的方法相当简单)。