声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1140|回复: 5

[综合讨论] 问个解方程组的问题

[复制链接]
发表于 2009-7-27 21:36 | 显示全部楼层 |阅读模式

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

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

x
用符号运算求解一个方程组,8个未知数,8个方程
得到的结果有6个未知数为零,把结果代入其中一个方程,明显不满足方程
请诸位大侠解释一下,问题有可能处在哪里?

用的是solve
PS:这些解并不是所有的方程都不符合,只有一些不符合

[ 本帖最后由 ChaChing 于 2009-7-27 22:56 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-7-27 22:59 | 显示全部楼层
建议楼主说清楚些, 并给齐完整格式:出错代码!
 楼主| 发表于 2009-7-28 10:14 | 显示全部楼层
%%初始化
clear
clc
syms p_00_I   p_10_I ; %p_00_II   p_10_II  p_00_III   p_10_III ;            %定义系数
syms Y_00_I   Y_10_I  Y_00_III   Y_10_III  ;                                %定义本征函数归一化的结果
syms k_00_I   k_10_I  k_00_II   k_10_II   k_00_III   k_10_III ;             %定义波数
syms X_0000_II_I  X_1000_II_I  X_0010_II_I  X_1010_II_I  ;                  %定义积分结果
syms X_0000_II_III  X_1000_II_III  X_0010_II_III  X_1010_II_III  ;          %定义积分结果
syms omega   den  theta ;                                                   %定义角速度,密度,角度

%%列方程


e1=sym('(1+A_00)*p_00_I*Y_00_I=(1+B_00)*p_00_II*X_0000_II_I+(1+B_10)*p_10_II*X_1000_II_I');
e2=sym('(1+A_10)*p_10_I*Y_10_I=(1+B_00)*p_00_II*X_0010_II_I+(1+B_10)*p_10_II*X_1010_II_I');
e3=sym('(1-A_00)*p_00_I*Y_00_I*k_00_I=(1-B_00)*p_00_II*X_0000_II_I*k_00_II+(1-B_10)*p_10_II*X_1000_II_I*k_10_II');
e4=sym('(1-A_10)*p_10_I*Y_10_I*k_10_I=(1-B_00)*p_00_II*X_0010_II_I*k_00_II+(1-B_10)*p_10_II*X_1010_II_I*k_10_II');
e5=sym('p_00_III*Y_00_III=(exp(-j*k_00_II*theta)+B_00*exp(j*k_00_II*theta))*p_00_II*X_0000_II_III+(exp(-j*k_10_II*theta)+B_10*exp(j*k_10_II*theta))*p_10_II*X_1000_II_III');
e6=sym('p_10_III*Y_10_III=(exp(-j*k_00_II*theta)+B_00*exp(j*k_00_II*theta))*p_00_II*X_0010_II_III+(exp(-j*k_10_II*theta)+B_10*exp(j*k_10_II*theta))*p_10_II*X_1010_II_III');
e7=sym('p_00_III*Y_00_III*k_00_III=(exp(-j*k_00_II*theta)-B_00*exp(j*k_00_II*theta))*p_00_II*X_0000_II_III*k_00_II+(exp(-j*k_10_II*theta)-B_10*exp(j*k_10_II*theta))*p_10_II*X_1000_II_III**k_10_II');
e8=sym('p_10_III*Y_10_III*k_10_III=(exp(-j*k_00_II*theta)-B_00*exp(j*k_00_II*theta))*p_00_II*X_0010_II_III*k_00_II+(exp(-j*k_10_II*theta)-B_10*exp(j*k_10_II*theta))*p_10_II*X_1010_II_III**k_10_II');

%%解方程组
[A_00,A_10,B_00,B_10,p_00_II,p_10_II,p_00_III,p_10_III]=solve(e1,e2,e3,e4,e5,e6,e7,e8)



我觉得写不写代码也没什么用

[ 本帖最后由 hebut 于 2009-7-28 10:15 编辑 ]
发表于 2009-7-28 22:57 | 显示全部楼层

回复 楼主 hebut 的帖子

直接数值离散求解算了,用符号求解慢,而且,你也不知道你的结果是不是有解析解。也不是所有非线性方程组都可以有解析解的。不想自己编程,试一下fsolve,把你的方程写成f{(x)=0的方程组形式。x1..x8为你的8个未知量,f(x)为你每个方程的的形式。

[ 本帖最后由 ChaChing 于 2009-7-29 18:52 编辑 ]

评分

1

查看全部评分

发表于 2009-7-29 18:56 | 显示全部楼层
发表于 2010-2-3 11:42 | 显示全部楼层
整理电脑档案, 发现这帖, 顺便学习练习下, 并help solve
发现LZ可能solve使用错误!
[A_00,A_10,B_00,B_10,p_00_II,p_10_II,p_00_III,p_10_III]=solve(e1,e2,e3,e4,e5,e6,e7,e8)
solve解出的变数可能并非如LZ的排列!
建议使用g = solve(eq1,eq2,...,eqn,var1,var2,...,varn)格式试试!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 01:39 , Processed in 0.057488 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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