超越复数方程怎么解?求个公式

Python033

超越复数方程怎么解?求个公式,第1张

超越方程可以用功能强大的matlab求解

在此举一个已知弦长和弧长求园半径的例子.

法一:使用自带函数

%ezplot('x*sin(pi/(6*x))-0.5',[0.6,2])

示例:半径=1,六分之一圆弧

ezplot('x*sin(b/x)-a',[0.6,2])

%求解方程:x*sin(b/x)-a=0

%ezplot('x*sin(pi/(4*x))-0.707',[0.6,2])

hold

on

plot(xlim,[0

0],'r')

grid

%

a=弦长/2

,

b=弧长/2

,【】为解区间.

%

图中红线和蓝线的交点就是解

%

更精确的解可以使用二分法求解

%

本例可以选择交点两侧的点[2,4],[5,7]再次求解,可以更精确

%

本人认为如此处理没有解不出来的超越方程

法二:差值法收敛求解

a=0.707

%弦长/2

b=pi/4

%弧长/2

r1=0

%收敛区间

r2=3

for

i=1:10000

%收敛次数

r=(r1+r2)/2

%

c(i)=r*sin((180*b)/(pi*r))

c(i)=r*sin(pi/(4*r))

%

c(i)=r*sin(b/r)

if

c(i)>a

r2=r

else

r1=r

1、R语言矩阵函数

t(x) 转置diag(x) 对角阵x %*% y 矩阵运算solve(a,b) 运算a%*%x=b得到xsolve(a) 矩阵的逆rowsum(x)行加和colsum(x)列加和rowMeans(x) 行平均colMeans(x) 列平均

2、求解线性方程组

分析:使用函数solve(a,b),运算a%*%x=b得到x。a<-matrix(c(1,1,1,-1),2,2)b<-c(3,1)solve(a,b)运行结果>a<-matrix(c(1,1,1,-1),2,2)b<-c(3,1)solve(a,b)[1] 2 1a<-matrix(c(1,1,1,-1),2,2)

b<-c(3,1)

solve(a,b)

运行结果

>a<-matrix(c(1,1,1,-1),2,2)b<-c(3,1)solve(a,b)

[1] 2 1

注:这里矩阵a从数组读数是按照列读数

这类函数符号(log、sin之类)的后面以及外面都有未知数的方程为超越方程。是不能用普通方法来解的,只能用函数图像(尽可能简单的)来得到近似解。

另外一种就是二分法:

一般地,对于函数f(x),如果存在实数c,当x=c是f(c)=0,那么把x=c叫做函数f(x)的零点

解方程即要求f(x)的所有零点。

先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],

现在假设f(a)<0,f(b)>0,a<b

①如果f[(a+b)/2]=0,该点就是零点,

如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用

中点函数值判断。

如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b,从①开始继续使用

中点函数值判断。

这样就可以不断接近零点。

通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。

由于计算过程中运算相当复杂,所以可通过Fortran编写程序利用计算机来运算。