在matlab中声明复杂函数

在matlab中声明复杂函数,matlab,Matlab,我想在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. 如何声明它,以便将其用作循环中的函数 我想以数字形式找到此函数的根,因此我首先需要声

我想在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.
如何声明它,以便将其用作循环中的函数


我想以数字形式找到此函数的根,因此我首先需要声明它,以便在循环中使用它。

您的括号有一些问题,需要添加单引号:

>>f=inline('((3/2)*(7.02^2))-(2*18*x*((1-(x/18))))*(1-(exp(-18/x)))')

括号有一些问题,需要添加单引号:

>>f=inline('((3/2)*(7.02^2))-(2*18*x*((1-(x/18))))*(1-(exp(-18/x)))')

首先,您应该了解,这样您就可以避免许多令人困惑的括号

其次,正如大多数其他人在这里提到的,
inline
速度慢,不适合此用途。你最好使用(并学习如何正确使用)匿名函数,也称为函数句柄

第三,如果您想找到此函数的根,最好使用经过广泛测试的专用于此目的的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
-ing,找到了初始值。这绝不是一种找到所有根的可靠方法,但我相信您可以找到更好的方法(这个问题很容易通过分析解决)

首先,您应该了解,这样您就可以避免使用许多令人困惑的括号

其次,正如大多数其他人在这里提到的,
inline
速度慢,不适合此用途。你最好使用(并学习如何正确使用)匿名函数,也称为函数句柄

第三,如果您想找到此函数的根,最好使用经过广泛测试的专用于此目的的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
-ing,找到了初始值。这绝不是一种找到所有根的可靠方法,但我相信您可以找到更好的方法(这个问题很容易通过分析解决)

如果你不需要用这个方程进行符号数学运算,而是想得到数值结果,你可以将它定义为一个异常函数:
f=@(x)((3/2)*(7.02^2))-(2*18*x*((1-(x/18))*(1-(exp(-18/x);)
,并在
x=3
处找到值作为
f(3)
如果你不需要用这个方程进行符号数学运算,而是想得到数值结果,你可以将它定义为一个异常函数:
f=@(x)((3/2)*(7.02^2))-(2*18*x*((1-(x/18))*(1-(exp(-18/x)()())
,并在
x=3
处找到值作为
f(3)
注意内联函数的速度很慢。这里不需要使用内联,只需要一个函数句柄。也许这是为了指向@Abdullah?我的评论是针对阅读此答案的任何人的,虽然您的答案解决了问题,但总体而言,这是一个糟糕的问题解决方案。函数句柄即使不容易创建,也同样容易创建,而且效率会大大提高。请注意,内联函数速度较慢。这里不需要使用内联,只需要一个函数句柄。也许这是为了指向@Abdullah?我的评论是针对阅读此答案的任何人的,虽然您的答案解决了问题,但总体而言,这是一个糟糕的问题解决方案。函数句柄即使不容易创建,也同样容易创建,而且效率会大大提高。