【问题标题】:MATLAB Unable to Store Symbolic Function with Multiple VariablesMATLAB 无法存储具有多个变量的符号函数
【发布时间】:2019-11-25 07:29:26
【问题描述】:

我正在尝试将函数的定积分从 -1 变为 1 关于x。该函数有变量abcdx,所有这些我都定义为syms变量。我试图将abcd 保留在我的最终积分中,因为稍后我将针对每个优化问题进行区分。这是我拥有的当前代码:

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);

当我尝试仅使用变量 xy 来实现较小的函数时,类似的代码也有效。但是,当我尝试这段代码时,我得到:

使用 sym/subsindex 时出错(第 825 行)无效的索引或函数 定义。索引必须遵循 MATLAB 索引。函数参数 必须是符号变量,函数体必须是符号表达式。

sym/subsref 错误(第 870 行)
R_tilde = builtin('subsref',L_tilde,Idx);

HW11 中的错误(第 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);

【问题讨论】:

  • f(x)表达式中的cd之后添加乘法运算符*,否则将被解释为数组
  • 谢谢!这行得通,我什至没有注意到我在那里缺少一个操作员。

标签: matlab syntax-error symbolic-math


【解决方案1】:

正如Adamcomment 中提到的,您可能忘记在cd 之后添加乘法运算符*,所以当您编写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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多