handb 发表于 2007-9-11 11:00

帮忙看看我的一个方程求解的小程序

为什么我的程序得不到结果呢?
c=0.1442;
alfa=0.1;
w=0:0.1:2.5;
H=w.^2;
for w=0:0.1:2.5;
    A=solve('((2*c*w)^2+(1-w^2+alfa*(3/4)*x)^2)*x=H^2');%解方程
    y=A(3,1);%得到三个解,取实数解
   plot(w,y)
   hold on
end

[ 本帖最后由 eight 于 2007-9-11 11:52 编辑 ]

eight 发表于 2007-9-11 11:54

原帖由 handb 于 2007-9-11 11:00 发表 http://www.chinavib.com/forum/images/common/back.gif
为什么我的程序得不到结果呢?
c=0.1442;
alfa=0.1;
w=0:0.1:2.5;
H=w.^2;
for w=0:0.1:2.5;
    A=solve('((2*c*w)^2+(1-w^2+alfa*(3/4)*x)^2)*x=H^2');%解方程
    y=A(3,1);%得到三个解,取实数解
...

solve 里面的方程:等号左边是标量,右边是向量,哪能得到结果?建议先搞清楚点运算和整体运算的区别,多看看基础书,或者本版的初学者系列相关帖子

handb 发表于 2007-9-11 15:15

该了一下,还是报错
c=0.1442;
alfa=0.1;
w=0:0.1:2.5;
for j=1:26;
    H(j)=(w(j))^2;
    strEqu=['((2*c*w)^2+(1-w^2+alfa*(3/4)*x)^2)*x=(H)^2'];%解方程
    x(j)=solve(strEqu);
    y(j)=x(j)(3,1);%得到三个解,取实数解
    j=j+1;
   plot(w,y(j))
   hold on
end
??? Error: () Indexing must appear last in an index expression.

eight 发表于 2007-9-11 15:19

原帖由 handb 于 2007-9-11 15:15 发表 http://www.chinavib.com/forum/images/common/back.gif
该了一下,还是报错
c=0.1442;
alfa=0.1;
w=0:0.1:2.5;
for j=1:26;
    H(j)=(w(j))^2;
    strEqu=['((2*c*w)^2+(1-w^2+alfa*(3/4)*x)^2)*x=(H)^2'];%解方程
    x(j)=solve(strEqu);
    y(j)=x(j)( ...

matlab 没有 x(j)(3,1) 这种表示的,建议还是先打好基础,不能心急

xjzuo 发表于 2007-9-11 15:29

问题很多.
提示: 用num2str将常数带入方程;将H=w.^2;写为H=w^2;放到循环里面,...

handb 发表于 2007-9-11 15:33

谢谢,我再试试

handb 发表于 2007-9-12 15:49

改了一下,把运算过程不变的常数直接代到方程中,还是不行
clear
w=0:0.1:2.5;
forj=1:26;
    H(j)=w(j)^2;
    strEqu=['(2*0.1442)^2*',num2str(w^2),'+(1-',num2str(w^2),'+(3/4)*0.1*x)^2*x-H^2'];%解方程
    x(j)=solve(strEqu);
      y(j)=isreal(x(j));%取实数解
      j=j+1;
    ww=double(w);
    yy=double(y(j))
    plot(ww,yy)
    hold on
end

xjzuo 发表于 2007-9-12 23:22

这程序编得真是有点惨不忍睹...
你自己按此修改一下吧:
%%%%%%%%%%%%%%
...
w1=0:0.1:2.5;
for k=1:length(w1);
    w=w1(k);
    H=w1(k)^2;
...
plot(w1,y)放到循环外面.
%%%%%%%%%%%%%
不过要注意: 并非只有第一个根为实根(有些情况3个都为实根), 所以上面的取法不一定合适.
关键是你没有讲清楚原问题, 所以不便猜测.

[ 本帖最后由 xjzuo 于 2007-9-13 09:07 编辑 ]

handb 发表于 2007-9-13 09:02

谢谢xjzuo,不好意思,给你添麻烦了,再次表示感谢
改了一下,可方程还是解不了啊
clear all
w1=0:0.1:2.5;
for k=1:length(w1);
    w=w1(k);
    H=w1(k)^2;
    strEqu=['(2*0.1442)^2*',num2str(w^2),'+(1-',num2str(w^2),'+(3/4)*0.1*x)^2*x-H^2'];
    x(k)=solve(strEqu);
    y(k)=x(3,:);%一个w有三个解,只有第三个解是实数解,不知这样取对不
    k=k+1;
end
plot(w1,y)
??? Subscripted assignment dimension mismatch.

dingd 发表于 2007-9-13 19:57

用1stOpt方便点。

Constant c=0.1442,alfa=0.1;
LoopConstant w=;
ConstStr H=w^2;
Function ((2*c*w)^2+(1-w^2+alfa*(3/4)*x)^2)*x=H^2;

handb 发表于 2007-9-14 07:30

谢谢dingd,thanks....
我自己的程序也解决了,要把解转换成double类型,谢谢帮助,谢谢!
页: [1]
查看完整版本: 帮忙看看我的一个方程求解的小程序