MATLAB 无法存储具有多个变量的符号函数
MATLAB Unable to Store Symbolic Function with Multiple Variables
我正在尝试对 x
的函数求从 -1 到 1 的定积分。该函数有变量 a
、b
、c
、d
和 x
,所有这些我都定义为 syms
变量。我试图将 a
、b
、c
、d
保留在我的最终积分中,因为稍后我将针对优化问题对每一个进行区分。这是我当前的代码:
syms f(x);
syms a b c d;
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)*x)-c((sqrt(45/8))*(x^2-(1/3)))+d((sqrt(175/8))*((x^3)-(3/5)*(x))))^2;
integral = int(f, x, [-1 1]);
disp(integral);
当我尝试仅使用变量 x
和 y
来实现较小的函数时,类似的代码有效。但是,当我尝试这段代码时,我得到:
Error using sym/subsindex (line 825) Invalid indexing or function
definition. Indexing must follow MATLAB indexing. Function arguments
must be symbolic variables, and function body must be sym expression.
Error in sym/subsref (line 870)
R_tilde = builtin('subsref',L_tilde,Idx);
Error in HW11 (line 4)
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)x)-c((sqrt(45/8))(x^2-(1/3)))+d((sqrt(175/8))((x^3)-(3/5)(x))))^2;
我对 MATLAB 中的符号函数和 syms
变量还很陌生,为什么 MATLAB 拒绝此代码?我尝试过的类似代码是:
syms f(x);
syms y;
f(x) = (x^2) + y;
integral = int(f, x, [0 3]);
disp(integral);
如 by Adam中所述,您可能忘记在c
和d
之后添加乘法运算符*
,因此当您编写c(...)
和 d(...)
MATLAB 将它们视为数组的索引,但您不能使用符号变量或表达式对数组进行索引。您需要将其更改为 c*(...)
和 d*(...)
.
替换:
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)*x)-c((sqrt(45/8))*(x^2-(1/3)))+d((sqrt(175/8))*((x^3)-(3/5)*(x))))^2;
与:
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)*x)-c*((sqrt(45/8))*(x^2-(1/3)))+d*((sqrt(175/8))*((x^3)-(3/5)*(x))))^2;
我正在尝试对 x
的函数求从 -1 到 1 的定积分。该函数有变量 a
、b
、c
、d
和 x
,所有这些我都定义为 syms
变量。我试图将 a
、b
、c
、d
保留在我的最终积分中,因为稍后我将针对优化问题对每一个进行区分。这是我当前的代码:
syms f(x);
syms a b c d;
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)*x)-c((sqrt(45/8))*(x^2-(1/3)))+d((sqrt(175/8))*((x^3)-(3/5)*(x))))^2;
integral = int(f, x, [-1 1]);
disp(integral);
当我尝试仅使用变量 x
和 y
来实现较小的函数时,类似的代码有效。但是,当我尝试这段代码时,我得到:
Error using sym/subsindex (line 825) Invalid indexing or function definition. Indexing must follow MATLAB indexing. Function arguments must be symbolic variables, and function body must be sym expression.
Error in sym/subsref (line 870)
R_tilde = builtin('subsref',L_tilde,Idx);Error in HW11 (line 4)
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)x)-c((sqrt(45/8))(x^2-(1/3)))+d((sqrt(175/8))((x^3)-(3/5)(x))))^2;
我对 MATLAB 中的符号函数和 syms
变量还很陌生,为什么 MATLAB 拒绝此代码?我尝试过的类似代码是:
syms f(x);
syms y;
f(x) = (x^2) + y;
integral = int(f, x, [0 3]);
disp(integral);
如c
和d
之后添加乘法运算符*
,因此当您编写c(...)
和 d(...)
MATLAB 将它们视为数组的索引,但您不能使用符号变量或表达式对数组进行索引。您需要将其更改为 c*(...)
和 d*(...)
.
替换:
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)*x)-c((sqrt(45/8))*(x^2-(1/3)))+d((sqrt(175/8))*((x^3)-(3/5)*(x))))^2;
与:
f(x)= (exp(x)-a*(1/sqrt(2))-b*(sqrt(3/2)*x)-c*((sqrt(45/8))*(x^2-(1/3)))+d*((sqrt(175/8))*((x^3)-(3/5)*(x))))^2;