!高斯消去法
subroutine agaus(a,b,n,x,l,js)
dimension a(n,n),x(n),b(n),js(n)
double precision a,b,x,t
l=1 !逻辑变量
do k=1,n-1
d=00
do i=k,n
do j=k,n
if (abs(a(i,j))>d) then
d=abs(a(i,j))
js(k)=j
is=i
end if
end do
end do !把行绝对值最大的元素换到主元位置
if (d+10==10) then
l=0
else !最大元素为0无解
if(js(k)/=k) then
do i=1,n
t=a(i,k)
a(i,k)=a(i,js(k))
a(i,js(k))=t
end do !最大元素不在K行,K行
end if
if(is/=k) then
do j=k,n
t=a(k,j)
a(k,j)=a(is,j)
a(is,j)=t !交换到K列
end do
t=b(k)
b(k)=b(is)
b(is)=t
end if !最大元素在主对角线上
end if !消去
if (l==0) then
write(,100)
return
end if
do j=k+1,n
a(k,j)=a(k,j)/a(k,k)
end do
b(k)=b(k)/a(k,k) !求三角矩阵
do i=k+1,n
do j=k+1,n
a(i,j)=a(i,j)-a(i,k)a(k,j)
end do
b(i)=b(i)-a(i,k)b(k)
end do
end do
if (abs(a(n,n))+10==10) then
l=0
write(,100)
return
end if
x(n)=b(n)/a(n,n)
do i=n-1,1,-1
t=00
do j=i+1,n
t=t+a(i,j)x(j)
end do
x(i)=b(i)-t
end do
100 format(1x,'fail')
js(n)=n
do k=n,1,-1
if (js(k)/=k) then
t=x(k)
x(k)=x(js(k))
x(js(k))=t
end if
end do
return
end
program main
dimension a(4,4),b(4),x(4),js(4)
double precision a,b,x
real m1,m2,j
open(1,file="laiyitxt")
read(1,)m1,m2,j
close(1)
n=4
print,m1,m2,j
a(1,1)=m1cos(314159j/180)
a(1,2)=-m1
a(1,3)=-sin(314159j/180)
a(1,4)=0
a(2,1)=m1sin(314159j/180)
a(2,2)=0
a(2,3)=cos(314159j/180)
a(2,4)=0
a(3,1)=0
a(3,2)=m2
a(3,3)=-sin(314159j/180)
a(3,4)=0
a(4,1)=0
a(4,2)=0
a(4,3)=-cos(314159j/180)
a(4,4)=1
b(1)=0
b(2)=m198
b(3)=0
b(4)=m298
call agaus(a,b,n,x,l,js)
if (l/=0) then
write(,)"a1=",x(1),"a2=",x(2) ,"n1=",x(3),"n2=",x(4)
end if
end
!逆矩阵求解
SUBROUTINE qiuni(A,N,L,IS,JS)
DIMENSION A(N,N),IS(N),JS(N)
DOUBLE PRECISION A,T,D
L=1
DO K=1,N
D=00
DO I=K,N
DO J=K,N
IF(ABS(A(I,J))GTD) THEN !把最大的元素给D
D=ABS(A(I,J))
IS(K)=I
JS(K)=J
END IF
END DO
END DO
IF (D+10EQ10)THEN
L=0
WRITE(,200)
RETURN
END IF
200 FORMAT(1X,'ERRNOT INV')
DO J=1,N
T=A(K,J)
A(K,J)=A(IS(K),J)
A(IS(K),J)=T
END DO
DO I=1,N
T=A(I,K)
A(I,K)=A(I,JS(K))
A(I,JS(K))=T
END DO
A(K,K)=1/A(K,K)
DO J=1,N
IF(JNEK)THEN
A(K,J)=A(K,J)A(K,K)
END IF
END DO
DO I=1,N
IF(INEK)THEN
DO J=1,N
IF(JNEK)THEN
A(I,J)=A(I,J)-A(I,K)A(K,J)
END IF
END DO
END IF
END DO
DO I=1,N
IF(INEK)THEN
A(I,K)=-A(I,K)A(K,K)
END IF
END DO
END DO
DO K=N,1,-1
DO J=1,N
T=A(K,J)
A(K,J)=A(JS(K),J)
A(JS(K),J)=T
END DO
DO I=1,N
T=A(I,K)
A(I,K)=A(I,IS(K))
A(I,IS(K))=T
END DO
END DO
RETURN
END
SUBROUTINE BRMUL(A,B,N,C)
DIMENSION A(N,N),B(N),C(N)
DOUBLE PRECISION A,B,C
DO I=1,N
DO J=1,N
C(I)=00
DO L=1,N
C(I)=C(I)+A(I,L)B(L)
END DO
END DO
END DO
RETURN
END
program main
DIMENSION A(4,4),B(4,1),C(4,1),IS(4),JS(4)
DOUBLE PRECISION A,B,C
REAL M1,M2,JD
OPEN(1,FILE='LAIYITXT')
READ(1,) M1,M2,JD
PRINT,M1,M2,JD
CLOSE(1)
A(1,1)=M1COS(314JD/180)
A(1,2)=-M1
A(1,3)=-SIN(314JD/180)
A(1,4)=0
A(2,1)=M1SIN(314JD/180)
A(2,2)=0
A(2,3)=COS(314JD/180)
A(2,4)=0
A(3,1)=0
A(3,2)=M2
A(3,3)=-SIN(314JD/180)
A(3,4)=0
A(4,1)=0
A(4,2)=0
A(4,3)=-COS(314JD/180)
A(4,4)=1
B(1,1)=0
B(2,1)=M198
B(3,1)=0
B(4,1)=M298
CALL QIUNI(A,4,L,IS,JS)
CALL BRMUL(A,B,4,C)
WRITE(,) (C(I,1),I=1,4)
END
画图
USE MSFLIB
INTEGER status
TYPE(xycoord) xy
status=SETCOLORRGB(#FFFFFF)
status1=SETCOLORRGB(#0000FF)
OPEN(1,FILE="GTXT")
READ(1,) G1,G2,G3,G4
OPEN(2,FILE="NTXT")
READ(2,) N1,N2,N3,N4
CALL MOVETO(INT(20),INT(20),xy)
status=LINETO(INT(40),INT(G1))
status=LINETO(INT(80),INT(G2))
status=LINETO(INT(120),INT(G3))
status=LINETO(INT(160),INT(G4))
CALL SETLINESTYLE(#FF00)
CALL MOVETO(INT(20),INT(20),xy)
status1=LINETO(INT(40),INT(N1))
status1=LINETO(INT(80),INT(N2))
status1=LINETO(INT(120),INT(N3))
status1=LINETO(INT(160),INT(N4))
READ(,)
END
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
解题步骤:
2×(x-16)=6
2x-32=6
2x=6+32
2x=38
x=19
提高:
一、培养认真审题的习惯
认真审题是正确解题、准确计算的前提。小学生因审题不严而导致错误的现象较重,原因是一方面学生识字量少,理解水平低;另一方面是做题急于求成,不愿审题。因此,教师在教学中,要引导学生认识审题的重要性,增强审题意识。同时,还要教给学生审题方法,建立解题的基本程序如审题—列式—计算—验 算—作答等,把审题摆在解题过程的第一位。
二、培养认真验算的习惯
在解题过程中,要培养认真验算的习惯,这是保证解题正确性的关键。教师在教学中要把验算作为解题过程的基本环节之一。加强训练,严格要求和督促学生去做,要向学生讲清什么叫验算以及验算的方法、意义等。
三、培养认真估算的习惯
估算是保障计算准确的快捷手段,但现在不少教师认为估算很少作为考试内容而不予重视,这是十分错误的。教师要抓住各种时机,有意识的让学生掌握 估算方法,引导学生发现一些和、差、积、商的规律。如2040÷40,估算时将2040看作2000,把2040÷40看作2000÷40来估算,可用来 检验计算的最高位是否正确,让学生明白估算的重要性。
sol=[];
syms c
for i=1:21
b=(i-1)05;
eq1=3b-c;
sol(i)=solve(eq1,'c');
end
sol
sol =
Columns 1 through 3
0 15000 30000
Columns 4 through 6
45000 60000 75000
Columns 7 through 9
90000 105000 120000
Columns 10 through 12
135000 150000 165000
Columns 13 through 15
180000 195000 210000
Columns 16 through 18
225000 240000 255000
Columns 19 through 21
270000 285000 300000
/实现二分法求解方程。编写并使用以下函数:double
SolveRoot(double(pf)(double
x),double
a,double
b,int
n)这里,pf指向一个函数f,f用来定义要求解的方程f(x)=0,a和b是未知解x的上下界(即a<=x<=b),n是循环次数。例如,如果f(x)=xx-2,则SolveRoot
(f,1,2,100)将返回1414213562373095,即方程为xx=2的解。二分法的原理是反复地把区间分为两个相等区间,然后用其中含有解的一半代替该区间,依次类推,得到满足精度的解。它通过检查f(a)和f(b)的符号来判断解是否在区间中。/#include
<cmath>#include
<iomanip>#include
<iostream>using
namespace
std;double
SolveRoot(double
(pf)(double
t),
double
a,
double
b,
int
n){//请补充完整
double
mid=(a+b)/2;
double
fm=pf(mid);
if(n==0)
return
mid;
double
fa=pf(a);
if(fmfa>0)
a=mid;
else
b=mid;
return
SolveRoot(pf,a,b,n-1);}double
f(double
x){
return
xx
-
2;}int
main(){
cout<<setprecision(20);
for(int
n=10;
n<60;
n+=5)
cout<<"SolveRoot(f,1,2,"<<n<<")
=
"<<SolveRoot(f,1,2,n)<<endl;
cout<<"The
exact
SolveRoot
=
"<<sqrt(2)<<endl;
return
0;}
给你一点提示。
牛顿迭代法要计算
(1)
y1=f(x)
在
x
的函数值
(2)
d1=f(x)
的一阶导数
在
x
的值
你可以写两个函数,分别计算y1,d1
如果一阶导数有解析解,则可用赋值语句,否则要写数值解子程序。
步骤:
设解的精度,例
float
eps=0000001;
设x初值,x1;
算y1=f(x1);
迭代循环开始
算一阶导数
在
x1
的值
d1
用牛顿公式
算出
x2;
[x2
=
x1
-
y1
/
d1]
如果
fabs(x2-x1)
>
eps
则从新迭代
--
用新的函数值和一阶导数值推下一个
新x
以上就是关于用直接消去法解方程组的程序如何编写(Fortran程序)全部的内容,包括:用直接消去法解方程组的程序如何编写(Fortran程序)、2×(x-16)=6解方程过程、如何用matlab循环解方程,比如解方程3b-c=0,b是变量,取值从0到10,变化量为0.5,求方程的解c的每个值。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)