matlab方程组求解问题

2024-12-03 14:00:26
推荐回答(5个)
回答1:

你的数值取得太大了点吧,建议简化一下后再用吧。还有你的方程中间只有两个未知数,却有四个方程啊?
syms thetar2 thetaR2 v2 x
这句话的意思我估计你都没有清楚。自己找书好好看下吧。你在这里用的不对。
还有不是你说的什么换成三角函数的问题。
以下是我修改的。你的数值太大了,我在我的电脑上运行了10分钟都没有出结果。如果你的电脑够强悍的话,你自己运行吧。建议你把你的数据根据你所要的精度进行简化,这样很快就能出结果。
clc
clear all
close all

s=solve('thetar2-acos((7086690207654121/427993491046400000000000*v2^2*x^2-1)/(1-7086690207654121/427993491046400000000000*v2^2*(2-7086690207654121/427993491046400000000000*v2^2)*x^2)^(1/2))=0','thetaR2-2*pi+acos((3189/199300000000*v2^2*x^2-1)/(1-3189/199300000000*v2^2*(2-3189/199300000000*v2^2)*x^2)^(1/2))=0','thetaR2-thetar2-550297616108123/281474976710656=0','1960630145625185/33554432+v2^2-8411179992709517/549755813888*v2*(7575036083959549/9007199254740992*x+2436619930421929/4503599627370496*(1-x^2)^(1/2))=0');

syms thetar2 thetaR2 v2 x
定义了四个未知数啊,这句话基本上就没有用,这不是C语言哦。
怎么简化?比如说7086690207654121/427993491046400000000000近似为7087/4279934910464,当然还要大概看下未知数的大小哦,我不知道你是做什么的,取这么多位数,位数太多了,电脑也受不了啊。

回答2:

建议你请个专业人员看下。

回答3:

应该是很简单的呀。

回答4:

用数值解法吧,只要初值合适就行。

function slv
lsqnonlin(@fun,[0 0 0 0])
function g=fun(y)
thetar2=y(1);thetaR2=y(2);v2=y(3);x=y(4);
g(1)=thetar2-acos((7086690207654121/427993491046400000000000*v2^2*x^2-1)/(1-7086690207654121/427993491046400000000000*v2^2*(2-7086690207654121/427993491046400000000000*v2^2)*x^2)^(1/2));
g(2)=thetaR2-2*pi+acos((3189/199300000000*v2^2*x^2-1)/(1-3189/199300000000*v2^2*(2-3189/199300000000*v2^2)*x^2)^(1/2));
g(3)=thetaR2-thetar2-550297616108123/281474976710656;
g(4)=1960630145625185/33554432+v2^2-8411179992709517/549755813888*v2*(7575036083959549/9007199254740992*x+2436619930421929/4503599627370496*(1-x^2)^(1/2));

回答5:

跟反三角应该没太大关系。似乎是你的方法有问题,这么多位数字的运算在计算过程中可能会失真。