MATLAB求解方程组问题
我想用,我确信有一个非零解来解这些方程。方程式如下:MATLAB求解方程组问题,matlab,equations,Matlab,Equations,我想用,我确信有一个非零解来解这些方程。方程式如下: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y + 0.5*z = z 我在MATLAB中写道: [x,y,z]=solve('0.7071 * x+0.7071 * z=x','-0.5 * x+0.7071 * y+0.5 * z=y','-0.5 * x-0.7071 * y+0.5 * z=z'
0.7071*x + 0.7071*z = x
-0.5*x + 0.7071*y + 0.5*z = y
-0.5*x - 0.7071*y + 0.5*z = z
我在MATLAB中写道:
[x,y,z]=solve('0.7071 * x+0.7071 * z=x','-0.5 * x+0.7071 * y+0.5 * z=y','-0.5 * x-0.7071 * y+0.5 * z=z');
但结果是x=y=z=0。
正如我所说,我确信有一个解决办法。有人能帮忙吗?我认为你不需要使用
求解
函数,因为你的方程是线性方程组
重铸为矩阵方程:
Ax = B
0.7071*x + 0.7071*z = x
0.7071*x + 0.7071*x = x
1.4142*x = x
就你而言:
| -0.2929 0.0 0.7071 | | x | | 0 |
| -0.5 -0.2929 0.5 | | y | = | 0 |
| -0.5 -0.7071 -0.5 | | z | | 0 |
利用MATLAB的内置函数进行求解。见例
MATLAB的核心是求解这类方程
使用(一个类似MATLAB的开源环境) GPL许可证;适用于Windows installer): 所以答案是:x=0,y=0,z=0
解决方案也可以手工推导。从最后两个方程式开始:
-0.5*x + 0.7071*y + 0.5*z = y
-0.5*x - 0.7071*y + 0.5*z = z
0.2929*y = -0.5*x + 0.5*z
0.7071*y = -0.5*x + 0.5*z
0.2929*y = 0.7071*y
因此y=0.0,并且:
0.7071*y = -0.5*x + 0.5*z
0 = -0.5*x + 0.5*z
0 = -0.5*x + 0.5*z
0.5*x = 0.5*z
x = z
在第一个等式中插入:
Ax = B
0.7071*x + 0.7071*z = x
0.7071*x + 0.7071*x = x
1.4142*x = x
因此x=0.0。当x=z时,z=0.0。我认为你不需要使用
解函数,因为你的方程是线性方程组
重铸为矩阵方程:
Ax = B
0.7071*x + 0.7071*z = x
0.7071*x + 0.7071*x = x
1.4142*x = x
就你而言:
| -0.2929 0.0 0.7071 | | x | | 0 |
| -0.5 -0.2929 0.5 | | y | = | 0 |
| -0.5 -0.7071 -0.5 | | z | | 0 |
利用MATLAB的内置函数进行求解。见例
MATLAB的核心是求解这类方程
使用(一个类似MATLAB的开源环境)
GPL许可证;适用于Windows installer):
所以答案是:x=0,y=0,z=0
解决方案也可以手工推导。从最后两个方程式开始:
-0.5*x + 0.7071*y + 0.5*z = y
-0.5*x - 0.7071*y + 0.5*z = z
0.2929*y = -0.5*x + 0.5*z
0.7071*y = -0.5*x + 0.5*z
0.2929*y = 0.7071*y
因此y=0.0,并且:
0.7071*y = -0.5*x + 0.5*z
0 = -0.5*x + 0.5*z
0 = -0.5*x + 0.5*z
0.5*x = 0.5*z
x = z
在第一个等式中插入:
Ax = B
0.7071*x + 0.7071*z = x
0.7071*x + 0.7071*x = x
1.4142*x = x
因此x=0.0。当x=z时,z=0.0。x=0,y=0,z=0是正确的解决方案。这个问题很容易用手解决。x=0,y=0,z=0是正确的解决方案。这个问题可以很容易地手工解决。您正在寻找一个非平凡的解决方案v到a*v=v,v=[x;y;z]和
A = [ 0.7071 0 0.7071 ;
-0.5 0.7071 0.5 ;
-0.5 -0.7071 0.5 ];
B = [1 ; 1 ; 1];
AA = A-diag(B)
-0.2929 0 0.7071
-0.5 -0.2929 0.5
-0.5 -0.7071 -0.5
BB = B-B
0
0
0
AA\BB
0
0
0
A =
0.70710678118655 0 0.70710678118655
-0.50000000000000 0.70710678118655 0.50000000000000
-0.50000000000000 -0.70710678118655 0.50000000000000
可以将其转换为(A-I)v=0,其中I是3x3单位矩阵。要找到一个非平凡的解决方案,您需要做的是检查a-I的空空间:
>> null(A-eye(3))
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
所以,你有一个一维零空间。否则,您将看到多个列。列的每个线性组合都是这个空空间中的一个点,a-I映射到空向量。所以,这个向量的每一个倍数都是问题的解决方案
实际上,矩阵A是第一类旋转矩阵,因为det(A)=1,A'*A=恒等式。所以它的特征值为1,旋转轴作为相应的特征向量。上面我计算的向量是标准化的旋转轴
注:为此,我将0.7071替换为sqrt(0.5)。如果舍入误差是一个问题,但您事先知道必须有一个非平凡的解决方案,那么最好的办法是对a-I进行奇异值分解,并选择最右边的奇异向量:
>> [u,s,v] = svd(A-eye(3));
>> v(:,end)
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
通过这种方法,你可以计算一个向量v,它在| v |=1的约束下最小化| a*v-v |,其中|.|是欧几里德范数。你正在寻找一个非平凡的解v到a*v=v,v=[x;y;z]和
A =
0.70710678118655 0 0.70710678118655
-0.50000000000000 0.70710678118655 0.50000000000000
-0.50000000000000 -0.70710678118655 0.50000000000000
可以将其转换为(A-I)v=0,其中I是3x3单位矩阵。要找到一个非平凡的解决方案,您需要做的是检查a-I的空空间:
>> null(A-eye(3))
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
所以,你有一个一维零空间。否则,您将看到多个列。列的每个线性组合都是这个空空间中的一个点,a-I映射到空向量。所以,这个向量的每一个倍数都是问题的解决方案
实际上,矩阵A是第一类旋转矩阵,因为det(A)=1,A'*A=恒等式。所以它的特征值为1,旋转轴作为相应的特征向量。上面我计算的向量是标准化的旋转轴
注:为此,我将0.7071替换为sqrt(0.5)。如果舍入误差是一个问题,但您事先知道必须有一个非平凡的解决方案,那么最好的办法是对a-I进行奇异值分解,并选择最右边的奇异向量:
>> [u,s,v] = svd(A-eye(3));
>> v(:,end)
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
通过这种方法,您可以计算一个向量v,该向量在| v |=1的约束下最小化| a*v-v |,其中|.|是欧几里德范数。朋友们使用MATLAB命令rref(a)来表示Ax=B。。。。它将给出一个上三角矩阵。然后你可以很容易地计算出非平凡解。。。但请记住,如果rref(A)=I(如您的情况),则不存在非平凡解。
祝你好运朋友们使用MATLAB命令rref(A)for Ax=B。。。。它将给出一个上三角矩阵。然后你可以很容易地计算出非平凡解。。。但请记住,如果rref(A)=I(如您的情况),则不存在非平凡解。
祝你好运,我写的A=[0.7071 0.7071;-0.50.7071 0.5;-0.5-0.7071 0.5]
[x;y;z]=A*[x;y;z]
但它给出了错误。请注意,右边是x,y,z不是零。请你帮我在Matlab中写下它。我用应该在Matlab中运行的代码更新了这个问题。谢谢你的兴趣,但是B数组应该是[x;y;z],你写的方程和我在问题中写的方程不一样。-1你在什么地方搞砸了。有一个非常重要的解决方案。事实上,有无穷多个,因为Tv=0系统的矩阵T是单数的。我写了A=[0.7071 0 0.7071;-0.50.7071 0.5;-0.5-0.7071 0.5]
[x;y;z]=A*[x;y;z]
但它给出了错误。请注意,右边是x,y,z不是零。请你帮我在Matlab中写下它。我用应该在Matlab中运行的代码更新了这个问题。谢谢你的兴趣,但是B数组应该是[x;y;z],你写的方程和我在问题中写的方程不一样。-1你在什么地方搞砸了。有一个非常重要的解决方案。事实上,有无穷多个,因为你的Tv=0系统的矩阵T是奇异的。由于第一个方程缺少y,手工求解应该不难。你得到了什么?+/-符号不会有任何影响。@Hani:为什么你确定有一个非零解?…因为它是第一类旋转矩阵。因此,它有一个ei