MATLAB程序问题

MATLAB程序问题,第1张

楼上的回答存在问题

诚然,Mathematica在符号运算方面总体上优于MATLAB,推荐使用Mathematica没问题;但楼上关于MATLAB符号运算的说法却纯粹是想当然,像这样误导人的做法以后还是应该少一些。

其实,当solve返回多个输出参数的时候,其顺序是按照字母表顺序,而不是你通过输入参数指定的变量顺序,也不是楼上所说的按照变量出现的先后顺序。所以不小心很容易搞错(对于当前这个例子没问题)。

从solve函数的说明中摘录一段:

>> help solve

SOLVE  Symbolic solution of algebraic equations

     

    Three different types of output are possible  For one equation and one

    output, the resulting solution is returned, with multiple solutions to

    a nonlinear equation in a symbolic vector  For several equations and

    an equal number of outputs, the results are sorted in lexicographic

    order and assigned to the outputs  For several equations and a single

    output, a structure containing the solutions is returned

现在应该明白怎么做了吧?调用时应该是

[t,x,y,z] = solve(f,g,h,k);

再检验一下结果看看:

f=simple(subs(f))

g=simple(subs(g))

h=simple(subs(h))

k=simple(subs(k)) 

f = 

g =

h =

k = 

0

比 较好的做法是返回一个输出参数,该参数为结构体,然后再获得结构体的域即可:

s=solve();

fns = fieldnames(s);

for i=1:length(fns)

    eval([fns{i} '=s' fns{i}]);

end

在MATLAB中同样也可以用一个命令解决:

>> s=solve('x+z-a', '(2^(1/2)mx)/2 + (2^(1/2)my)/2+(2^(1/2)mt)/2 - (2^(1/2)mz)/2-b', 'm^2(y- t)-m^2c', '(2^(1/2)m^3(y-x+z+t))/2-m^2d')

s =

    t: [1x1 sym]

    x: [1x1 sym]

    y: [1x1 sym]

    z: [1x1 sym]

后面用st、sx之类的符号就可以引用求得的结果了。

Heaviside在matlab内部已经是一个定义好的函数,如果重新定义可能造成函数冲突,建议把函数名字更改下

----------

syms t

f=sym('(1-t/2)(Heaviside(t+2)-heaviside(t-2))');

subplot(2,3,1); ezplot(f,[-3,3]);

%y1=subs(f,t,-t); subplot(2,3,1); ezplot(y1,[-3,3]);

y2=subs(f,t,-t+2); subplot(2,3,2); ezplot(y2,[-1,5]);

y3=subs(f,t,-t-2); subplot(2,3,3); ezplot(y3,[-5,1]);

y4=subs(f,t,2t); subplot(2,3,4); ezplot(y4,[-2,2]);

y5=subs(f,t,-t); subplot(2,3,5); ezplot(y5,[-3,3]);

---------

上面这几行单独运行无错误。

看下你自己的思想是否用程序正确的表述出来

以上就是关于MATLAB程序问题全部的内容,包括:MATLAB程序问题、matlab程序问题、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10079611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存