声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3113|回复: 10

[编程技巧] solve 函数 变量太多导致输出顺序紊乱的对策

[复制链接]
发表于 2009-12-30 19:00 | 显示全部楼层 |阅读模式

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

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

x
使用solve函数解方程组
[a1,a2,............a20]=solve(Eq1,Ea2..........Eq20,a1,a2,..........a20)
有时候要解一些维数比较大的方程组,比如说变量时a1,a2,.......a20
这20个变量,在输出的时候,有可能会把真实的a1的值输出给a2上去了
有的时候甚至是全乱了(我遇到过,当时以为指定了顺序肯定没错的,没想到还是错了)

解决的方法是:
S=solve(Eq1,Ea2..........Eq20,a1,a2,..........a20);
这样解出来的S是一个结构体。
S.a1就是a1的值。

具体关于结构体的知识,请别人解释,我还不懂。

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2009-12-31 00:17 | 显示全部楼层

回复 楼主 beyondhxf 的帖子

真的这样!?
汗, 这块个人算初级而已
可否举例说明! 也好学习学习!
 楼主| 发表于 2009-12-31 09:31 | 显示全部楼层

回复 沙发 ChaChing 的帖子

简例如下:

  1. >> syms x y
  2. >> [x,y]=solve(x+y-1,x+1,x,y)
  3. x =-1
  4. y =2
复制代码
如果这样输入:

  1. syms x y
  2. >> [y,x]=solve(x+y-1,x+1,y,x)
  3. y =-1
  4. x =2
复制代码
第二次的结果是错的,对吧?
其实像这种简单的情况,我们一眼就看出来端倪。
可是我自己编了一个程序,其中算法内容不便公布。
在程序中就有一个10元1次方程组,我把变量的顺序是规规矩矩的正常顺序,没想到还是对错号了。
其实我那段程序查错查了一下午,一度认为是算法的问题,最终在用matlab和mathematica的结果比较才发现是solve的问题。
所以我觉得这个问题还是存在的,也许matlab可能给了其它的默认顺序,我不知道而已。提供1楼的方法供参考。

[ 本帖最后由 beyondhxf 于 2009-12-31 09:37 编辑 ]

评分

1

查看全部评分

发表于 2009-12-31 12:58 | 显示全部楼层
.
Matlab确实给了默认顺序,是按字母排序的,这个问题Help里讲得很清楚了。
 楼主| 发表于 2009-12-31 13:38 | 显示全部楼层

回复 地板 messenger 的帖子

是,可是我的变量也有字母上的顺序,是:a1,a2,a3,........a10
可还是乱了。
发表于 2009-12-31 13:53 | 显示全部楼层
按字母顺序,a10是排在a2前面的,电脑上排序是先比较第1位,然后再比较第2位、再比较第3位......。

评分

1

查看全部评分

发表于 2009-12-31 14:17 | 显示全部楼层

回复 板凳 beyondhxf 的帖子

虽然1F给了奖励, 其实2F说明个人是有点怀疑!?
并非怀疑说明的现象, 只是不太相信matlab软件会有如此不确定情况! 还是messenger仔细些, 昨晚太累了, 没看出!
还有LZ举的例子([y,x]=solve(x+y-1,x+1,y,x)), 有个严重的误解!
左侧是因使用者的赋值造成! 不管左侧怎给变数, 总是第一个赋值x而第二个赋值y! 希望有说清楚, LZ能了解!
 楼主| 发表于 2009-12-31 19:52 | 显示全部楼层

回复 7楼 ChaChing 的帖子

那你告诉我,如果变量是a1,a2,a3....................a10
怎么个顺序?
是不是从a1到a10按顺序排下来?
结果我做的不是!乱了。
源码不给出,但是你可以自己做一个例子试试。
发表于 2009-12-31 20:51 | 显示全部楼层

回复 8楼 beyondhxf 的帖子

不是6F说的那个样吗?:@)

[ 本帖最后由 ChaChing 于 2009-12-31 20:54 编辑 ]
 楼主| 发表于 2010-1-1 12:54 | 显示全部楼层

回复 7楼 ChaChing 的帖子

不再讨论这事了,我那个例子举得太烂,本身有问题,但是我发帖的目的不是为了说我3楼的例子,而是为了告诉大家,变量多了的时候,特别是变量名千奇百怪,没有什么规律,又或者你自己认为的规律和MATLAB默认的有冲突,而造成误解,最终导致结果紊乱的特殊情况。其实就算你知道了6楼的情况,你还是要在赋值前先算好顺序,10个变量不算多,也不少,那20个变量那?200个变量那?你先算好再输出,恐怕十分困难,也容易出错。我的帖子是无需事先计算变量顺序的,当你遇到很多变量的时候,我提供的那个方法也会奏效。

[ 本帖最后由 beyondhxf 于 2010-1-1 12:58 编辑 ]
发表于 2010-1-2 15:56 | 显示全部楼层
嗯,对你的那个方法还是持肯定态度的。正常的学术讨论,错的地方要指出,好的方法要赞赏。反正如果我有错的地方,希望别人指出来,总比一直错下去要好。的确,你的方法对变量比较多的情况比较有效。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-13 18:30 , Processed in 0.084726 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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