有基神限的字长不能把小数精确的转化成2进制
If CSng(x + y) = 2.2 And CSng(x - y) = 0.2 Then
Text1.Text = x
Text2.Text = y
End If
这样就行了
小余1的数 都要这样比较
楼上的把精度缩小团锋滑到一位小数 我这里是把精度缩小为塌腊单精度
因为浮点小数 就算出来的差值实际不是0.2 你可以去试验一下
可以这样写,代码如下
#include "pch.h"
#include <iomanip>
#include <iostream>
# include <fstream>
#include <iomanip>
#include <math.h>
void Chasing_method(double **a, double *b, double *xx, int N_num)
using namespace std
//*****************************
//追赶法求解AX=B矩阵
//*****************************
void Chasing_method(double **a, double *b, double *xx, int N_num)
{
int i, j, k
double *gamma = new double[N_num]()
double *alpha = new double[N_num]()
double *beta = new double[N_num]()
double *y = new double[N_num]()
alpha[0] = a[0][0]
beta[0] = a[1][0] / alpha[0]y[0] = b[0] / alpha[0]
for (i = 1i <N_numi++)
{
gamma[i] = a[i - 1][i]
alpha[i] = a[i][i] - gamma[i] * beta[i - 1]
if (i <N_num - 1)
{
beta[i] = a[i + 1][i] / alpha[i]
}
y[i] = (b[i] - gamma[i] * y[i - 1]) / alpha[i]
}
xx[N_num - 1] = y[N_num - 1]
for (i = N_num - 2i >= 0i--)
{
xx[i] = y[i] - beta[i] * xx[i + 1]
}
}
int main()
{
int N_num = 4
double **a = new double*[N_num]()
for (int i = 0i <N_numi++) //AX=B方程a[n][n]为系数矩阵
a[i] = new double[N_num]()
double *b = new double[N_num]() //AX=B方程b[n]为右侧列矩阵
double *x = new double[N_num]() //AX=B方程x[n]为方程解
ifstream fin("ab.txt")
for (int i=0i <N_numi++)
{
for (int j=0j <N_numj++)
{
fin >>a[i][j] 昌判//读取数
cout <<fixed <<setw(8) <<setprecision(4) <<a[i][j]
}
fin >>b[i]
cout <<fixed <<setw(8) <<setprecision(4) <<b[i] <<endl
}
Chasing_method(a, b, x, N_num)
cout <<"追赶法求得方程组解御穗为:" <<endl
for (int i = 0i <N_numi++)
{
cout<<"x["<<镇迅卜i<<"]=" <<fixed <<setw(8) <<setprecision(4) <<x[i] <<endl
}
}
#include "轮判stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std
//方程一(参见步骤一)
#define f0(x1,x2) (x1*x1-x2-1)
//方程二(参见步骤一)
#define f1(x1,x2) ((x1-2)*(x1-2)+(x2-0.5)*(x2-0.5)-1)
//方程精度(参见步骤一)
#define x_ 0.000001
//矩阵阶数(参见步骤二)
#define matrixNum 2
//计算雅克游磨比矩阵逆(参见步骤三)
double *matrixF2(double *x)
//计算雅克比矩阵(参见步骤二)
double *matrixB1(double *b,double *q,double *matrixB)
void main()
{
//计数器
int i,j
double n
//函数中自变量
double *x
double 神桐斗*b,*c,*q,p
double *t //(p-matrixB*q)
double *s //(pT*matrixB)
//方程组函数值
double *matrixF
//矩阵F的雅可比矩阵的逆
double *matrixB
double *matrixB1
//开辟空间
x=(double *)malloc(matrixNum)
b=(double *)malloc(matrixNum)
c=(double *)malloc(matrixNum)
q=(double *)malloc(matrixNum)
s=(double *)malloc(matrixNum)
t=(double *)malloc(matrixNum)
//计算方程组函数值
matrixF=(double *)malloc(matrixNum)
//matrixB=(double *)malloc(matrixNum*matrixNum)
matrixB1=(double*)malloc(matrixNum*matrixNum)
// 自变量输入
cout<<"请输入初值:"
for(i=0i<matrixNumi++)
cin>>*(x+i)
//计算雅克比矩阵逆
matrixB=matrixF2(x)
//计算函数值
*matrixF=f0(*x,*(x+1))
*(matrixF+1)=f1(*x,*(x+1))
do
{
p=0.0
for(i=0i<matrixNumi++)
*(c+i)=*(matrixF+i)
for(i=0i<matrixNumi++)
{
*(b+i)=0
*(q+i)=0
cout<<*(c+i)<<" "
}
cout<<endl<<"x值"
for(i=0i<matrixNumi++)
{
for(j=0j<matrixNumj++)
*(b+i)+=*(matrixB+i*matrixNum+j)*(*(c+j))
*(b+i)=-*(b+i)
*(x+i)=*(x+i)+(*(b+i))
cout<<*(x+i)<<" "
}
cout<<endl
*matrixF=f0(*x,*(x+1))
*(matrixF+1)=f1(*x,*(x+1))
for(i=0i<matrixNumi++)
{
p+=pow(*(b+i),2)
*(q+i)=*(matrixF+i)-*(c+i)
}
n=0
for(i=0i<matrixNumi++)
{
*(t+i)=0
*(s+i)=0
}
for(i=0i<matrixNumi++)
{
for(j=0j<matrixNumj++)
{
*(t+i)+=*(matrixB+i*matrixNum+j)*(*(q+j))
*(s+i)+=*(b+j)*(*(matrixB+j*matrixNum+i))
}
for(j=0j<matrixNumj++)
n+=*(s+i)*(*(q+j))
*(t+i)=*(b+i)-*(t+i)
}
for(i=0i<matrixNumi++)
cout<<endl<<*(q+i)<<" "
cout<<endl<<n<<endl
for(i=0i<matrixNumi++)
for(j=0j<matrixNumj++)
*(matrixB1+i*matrixNum+j)=*(t+i)*(*(s+j))/n+*(matrixB+i*matrixNum+j)
for(i=0i<matrixNumi++)
{
for(j=0j<matrixNumj++)
cout<<*(matrixB1+i*matrixNum+j)<<" "
cout<<endl
}
getchar()
matrixB=matrixB1
}while(sqrt(p)>x_)
//delete [] s
//delete [] t
//delete [] matrixF
//delete [] matrixB
cout<<"以上为结果"<<endl
getchar()
}
double *matrixF2(double *x)
{
int i,j
double t
double *matrixF1 //矩阵F的雅可比矩阵
double *matrixF2 //矩阵F的雅可比矩阵的逆
matrixF1=(double *)malloc(matrixNum*matrixNum)
matrixF2=(double *)malloc(matrixNum*matrixNum)
for(i=0i<matrixNumi++)
for(j=0j<matrixNumj++)
if(i==j)
*(matrixF2+i*matrixNum+j)=1
else *(matrixF2+i*matrixNum+j)=0
*matrixF1=(f0((*x+x_),*(x+1))-f0(*x,*(x+1)))/x_
*(matrixF1+1)=(f0(*x,(*(x+1)+x_))-f0(*x,*(x+1)))/x_
*(matrixF1+2)=(f1((*x+x_),*(x+1))-f1(*x,*(x+1)))/x_
*(matrixF1+3)=(f1(*x,(*(x+1)+x_))-f1(*x,*(x+1)))/x_
for(i=0i<matrixNumi++)
cout<<*(x+i)<<endl
cout<<"矩阵F在["<<*x<<','<<*(x+1)<<"]的雅可比矩阵"<<endl
for(i=0i<matrixNumi++)
{
for(j=0j<matrixNumj++)
cout<<*(matrixF1+i*matrixNum+j)<<" "
cout<<endl
}
//求矩阵F的雅可比矩阵的逆
t=*matrixF1
for(i=0,j=0j<matrixNumj++)
{
*(matrixF1+i*matrixNum+j)/=t
*(matrixF2+i*matrixNum+j)/=t
}
t=*(matrixF1+1*matrixNum)
for(i=1,j=0j<matrixNumj++)
{
*(matrixF1+i*matrixNum+j)-=*(matrixF1+j)*t
*(matrixF2+i*matrixNum+j)-=*(matrixF2+j)*t
}
t=*(matrixF1+1*matrixNum+1)
for(i=1,j=0j<matrixNumj++)
{
*(matrixF1+i*matrixNum+j)/=t
*(matrixF2+i*matrixNum+j)/=t
}
t=*(matrixF1+1)
for(i=i,j=0j<matrixNumj++)
{
*(matrixF1+j)-=*(matrixF1+i*matrixNum+j)*t
*(matrixF2+j)-=*(matrixF2+i*matrixNum+j)*t
}
for(i=0i<matrixNumi++)
{
for(j=0j<matrixNumj++)
cout<<*(matrixF1+i*matrixNum+j)<<" "
cout<<endl
}
for(i=0i<matrixNumi++)
{
for(j=0j<matrixNumj++)
cout<<*(matrixF2+i*matrixNum+j)<<" "
cout<<endl
}
getchar()
return matrixF2
delete [] matrixF1
delete [] matrixF2
}
//double *matrixB1(double *b,double *q,double *matrixB)
//{
// int i,j
//}
VS2008运行可行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)