声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1335|回复: 12

[编程技巧] 多系数的方程求解问题

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

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

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

x
问题来源:
有前面的信号处理得到一个m*5的
系数矩阵,矩阵每行为下面方程的系数p1,p2,p3,p4,p5,对应每组系数,方程
cos(10*pi*t)+p1*cos(8*pi*t)+p2*cos(6*pi*t)+p3*cos(4*pi*t)+p4*cos(2*pi*t)+1/2*p5=0
在0-0.5内有5个解,求其解t

问题表现:我用函数solve求解,如果把每行对应的系数的具体数值代替方程中的p1,p2,p3,p4,p5,就可以得到5个解,但系数用p1,p2,p3,p4,p5,之前取矩阵一行分别赋给p1,p2,p3,p4,p5,就提示如下错误,
??? Error using ==> solve
Unable to find closed form solution.

我实在是不明白,请高手指点
附上我的程序:
这个是系数具体的,可以得到结果
clear;
load p_LSP.mat
a=solve('cos(5*2*pi*t)+(-2.0226)*cos(4*2*pi*t)+2.5063*cos(3*2*pi*t)+(-2.6823)*cos(2*2*pi*t)+2.8038*cos(2*pi*t)+1/2*(-2.9325)=0');

为什么换成参数就不行了呢?而且用了sym

附件为系数矩阵,请高手帮我分析一下该怎么实现

[ 本帖最后由 eight 于 2007-11-19 20:39 编辑 ]

p_LSP.mat

1.3 KB, 下载次数: 4

回复
分享到:

使用道具 举报

发表于 2007-11-19 20:40 | 显示全部楼层
原帖由 iiiooo 于 2007-11-19 20:27 发表
问题来源:
有前面的信号处理得到一个m*5的
系数矩阵,矩阵每行为下面方程的系数p1,p2,p3,p4,p5,对应每组系数,方程
cos(10*pi*t)+p1*cos(8*pi*t)+p2*cos(6*pi*t)+p3*cos(4*pi*t)+p4*cos(2*pi*t)+1/2*p5=0
...

对这个不太懂,不过版面有很多相关讨论,请搜素、参考一下
发表于 2007-11-19 20:54 | 显示全部楼层

回复 #1 iiiooo 的帖子

加了引号'p',matlab就不知道p是给过值的p了,他只知道是个符号p
 楼主| 发表于 2007-11-19 21:41 | 显示全部楼层
原帖由 donkeyxu 于 2007-11-19 20:54 发表
加了引号'p',matlab就不知道p是给过值的p了,他只知道是个符号p


那应该怎么来求呢?不用符号运算吗?
请讲详细点好吗
发表于 2007-11-19 22:32 | 显示全部楼层

回复 #4 iiiooo 的帖子

%去掉引号即可
syms t p1 p2 p3 p4 p5
p1=-2.0226;p2=2.5063;p3=-2.6823;p4=2.8038;p5=-2.9325;
a=solve(cos(10*pi*t)+p1*cos(8*pi*t)+p2*cos(6*pi*t)+p3*cos(4*pi*t)...
+p4*cos(2*pi*t)+1/2*p5,'t');

评分

1

查看全部评分

 楼主| 发表于 2007-11-19 23:04 | 显示全部楼层
还是不行啊,出现这样的错误
The expression to the left of the equals sign is not a valid target for an assignment.
发表于 2007-11-19 23:20 | 显示全部楼层

回复 #6 iiiooo 的帖子

我运行无错
 楼主| 发表于 2007-11-19 23:21 | 显示全部楼层
用我的系数矩阵吗?
 楼主| 发表于 2007-11-19 23:23 | 显示全部楼层
是用for循环,完成整个29行的运算结果吗?
 楼主| 发表于 2007-11-19 23:29 | 显示全部楼层
我运行了,按照你的写法是可以得到结果,5个解,能不能加上for循环,每次自动取一行作为系数呢?因为是信号处理,每个系数都是不固定且不能自己输入的
究竟哪个需要符号,哪个需要数值,我还不太懂
谢谢了
发表于 2007-11-20 09:24 | 显示全部楼层

回复 #10 iiiooo 的帖子

%每次改变系数那就改啊。自己看看精通matlab教材啊,都有。
%例如:
syms t
pmatr=rand(10,5);
for m=1:size(pmatr,1)
     p=pmatr(m,:);
     a(m,:)=solve(t+p(1)+p(2)+p(3)+p(4)+p(5),'t');
end
发表于 2007-11-20 09:26 | 显示全部楼层
建议楼主自己多动脑筋、动手,如果遇到什么问题只懂发问,则自己永远只能落后别人
 楼主| 发表于 2007-11-20 10:55 | 显示全部楼层
呵呵,因为我弄了一天,都找不找原因,所以很着急,老八教训的对啊
自己是做信号处理的,很少遇到方程,所以不太明白
昨天晚上我根据donkeyxu 的提示,加上for循环,可以做出来结果,也学到了一点符号计算的皮毛

解一个符号方程,为什么要3秒的时间呢,我把数值直接写进去就很快,能解释一下什么原因吗?
我猜想大概是因为符号的原因,但具体不知道为什么

最好非常感谢donkeyxu 和老八
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-23 21:25 , Processed in 0.065851 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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