声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3538|回复: 11

[综合讨论] 再次求助一个代数方程组matlab求解问题

[复制链接]
发表于 2009-5-31 22:54 | 显示全部楼层 |阅读模式

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

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

x
首先感谢friendchj对我的帮助,见http://forum.vibunion.com/forum/thread-82586-1-1.html
方程组:x+y=a;x+2y=b.
其中当a=[1,2,3,4,5],b=[6,7,8,9,10],即a=1,b=6;a=2,b=7.......a=5,b=10.
要求解出x,y的值,并以a为自变量,在同一坐标中画出x,y。
我的程序如下:
syms x y a b
f1=x+y-a;
f2=x+2*y-b;
[kx,ky]=solve(f1,f2,x,y);
a1=[1:5];
b1=[6:10];
for i=1:length(kx)
fx(i,:)=subs(kx(i),{a,b},{a1,b1});
end
for i=1:length(ky)
fy(i,:)=subs(ky(i),{a,b},{a1,b1});
end
plot(a1,fx,a1,fy)
显然上述程序在求解方程时,先得到的是x,y关于a,b的符号表达式,即x=2a-b;y=b-a,然后再依次带入a,b的值求得x,y。
现在的问题是,我实际需要求解的方程组很麻烦,没办法获得类似于(x=2a-b,y=b-a)这样的关于参数的符号解。
我想知道我这个方程求解,怎么样先把a,b的值带入方程,再求出它的解决?
希望能给出详细的解答,再次感谢你无私的帮助!!!
回复
分享到:

使用道具 举报

发表于 2009-6-1 20:13 | 显示全部楼层
這是GUI嗎?
syms作啥用的?
是GUI的話是把syms改成global吧
发表于 2009-6-1 20:52 | 显示全部楼层
syms x y a b
a1=[1:5]; b1=[6:10];
for k=1:length(a1)
  f1=x+y-a; f2=x+2*y-b;
  f1=subs(f1,{a,b},{a1(k),b1(k)});
  f2=subs(f2,{a,b},{a1(k),b1(k)});
  [kx,ky]=solve(f1,f2,x,y);
  for i=1:length(kx), fx(i,k)=double(kx(i)); end
  for i=1:length(ky), fy(i,k)=double(ky(i)); end
end
plot(a1,fx,a1,fy)

评分

1

查看全部评分

发表于 2009-6-1 20:54 | 显示全部楼层

回复 沙发 lqbtbs 的帖子

符号运算的东东
发表于 2009-6-1 21:02 | 显示全部楼层
如果实际算式很麻烦,很可能没有解析解,这时可以用fsolve求数值解。
 楼主| 发表于 2009-6-1 21:17 | 显示全部楼层
原帖由 ChaChing 于 2009-6-1 20:52 发表
syms x y a b
a1=[1:5]; b1=[6:10];
for k=1:length(a1)
  f1=x+y-a; f2=x+2*y-b;
  f1=subs(f1,{a,b},{a1(k),b1(k)});
  f2=subs(f2,{a,b},{a1(k),b1(k)});
  [kx,ky]=solve(f1,f2,x,y);
  for i=1:length(k ...


ChangChing大黑狗哥哥:loveliness: ,太感谢你了,爱死你了,感谢振动论坛的各位朋友鼎力相助!!!
发表于 2009-6-1 21:39 | 显示全部楼层

回复 6楼 zhaoyaobang 的帖子

不客气! 个人工作上较少使用symbolic, 不顶熟, 仅是照friendchj的方式练习下罢了!

[ 本帖最后由 ChaChing 于 2009-6-2 08:14 编辑 ]
 楼主| 发表于 2009-6-1 22:38 | 显示全部楼层

回复 5楼 friendchj 的帖子

这位朋友能麻烦您具体告诉我一下吗?我刚学不久,应急用,完全是想照葫芦画瓢,麻烦您耐心指点!
发表于 2009-6-2 11:26 | 显示全部楼层
使用1stOpt可以很简单地解决这类问题:

LoopConstant a=[1,2,3,4,5],b=[6,7,8,9,10];
PlotLoopData a[x], x, y;
Function x+y=a;
              x+2*y=b;

结果:
a b x y
1 6 -4 5
2 7 -3 5
3 8 -2 5
4 9 -1 5
5 10 0 5
pp.jpg

评分

1

查看全部评分

发表于 2009-6-2 12:43 | 显示全部楼层
1stOpt的确有独到之处,呵呵
利用fsolve可以这样解:
主程序:
clc
clear
global a b
a=1;
b=6;
fsolve(@myfun,[0 0])
子程序:
function F=myfun(x,a,b)
global a b
F=[x(1)+x(2)-a;
   x(1)+2*x(2)-b];

评分

1

查看全部评分

 楼主| 发表于 2009-6-2 21:22 | 显示全部楼层
小弟真是三生有幸啊,ChaChing,friendchj,dingd几位大虾都亲自指教了,不愧是教研室主任:@) ,再次深表谢意!!

几位朋友不吝赐教,不厌其烦的把详细代码写出来,对我这个菜鸟真是莫大的帮助,我把大家的编程思路仔细弄明白了的话就能完全解决我的问题了:victory: 。谢谢各位!:handshake

[ 本帖最后由 ChaChing 于 2009-6-3 10:01 编辑 ]
 楼主| 发表于 2009-6-2 21:25 | 显示全部楼层
原帖由 dingd 于 2009-6-2 11:26 发表
使用1stOpt可以很简单地解决这类问题:

LoopConstant a=[1,2,3,4,5],b=[6,7,8,9,10];
PlotLoopData a[x], x, y;
Function x+y=a;
              x+2*y=b;

结果:
a b x y
1 6 -4 5
2 7 -3 5
3 8 -2 5
...

dingd大哥,你能把你的代码具体完整点吗?怎么获得曲线的整个过程,我看上去有点吃力!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-13 01:25 , Processed in 0.104139 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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