声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1792|回复: 10

[编程技巧] 帮忙看看我的一个方程求解的小程序

[复制链接]
发表于 2007-9-11 11:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
为什么我的程序得不到结果呢?
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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-9-11 11:54 | 显示全部楼层
原帖由 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);%得到三个解,取实数解
  ...


solve 里面的方程:等号左边是标量,右边是向量,哪能得到结果?建议先搞清楚点运算和整体运算的区别,多看看基础书,或者本版的初学者系列相关帖子
 楼主| 发表于 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.
发表于 2007-9-11 15:19 | 显示全部楼层
原帖由 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)( ...


matlab 没有 x(j)(3,1) 这种表示的,建议还是先打好基础,不能心急
发表于 2007-9-11 15:29 | 显示全部楼层
问题很多.
提示: 用num2str将常数带入方程;将H=w.^2;写为H=w^2;放到循环里面,...
 楼主| 发表于 2007-9-11 15:33 | 显示全部楼层
谢谢,我再试试
 楼主| 发表于 2007-9-12 15:49 | 显示全部楼层
改了一下,把运算过程不变的常数直接代到方程中,还是不行
clear
w=0:0.1:2.5;
for  j=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
发表于 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 编辑 ]
 楼主| 发表于 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.
发表于 2007-9-13 19:57 | 显示全部楼层
用1stOpt方便点。

Constant c=0.1442,alfa=0.1;
LoopConstant w=[0:0.02:2.5];
ConstStr H=w^2;
Function ((2*c*w)^2+(1-w^2+alfa*(3/4)*x)^2)*x=H^2;
21.jpg
 楼主| 发表于 2007-9-14 07:30 | 显示全部楼层
谢谢dingd,thanks....
我自己的程序也解决了,要把解转换成double类型,谢谢帮助,谢谢!

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-9 04:48 , Processed in 0.109849 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表