A. c語言 迭代法求一個數的平方根
這個跟給什麼值沒關系,只是給的值越接近,迭代次數越小,a/2是比較好的。
我自己發現一個更好的方法。由於任何正數經過無數次開根後都是1,所以可以用1和a來逼近a的根。
x1=1;
while(fabs(x0-x1)>=0.00001)
{
x0=x1;
x1=x1+(1-x0)/2;
}
B. 插值法的原理是什麼,怎麼計算
插值法原理:
數學內插法即「直線插入法」。
其原理是,若A(i1‚1)‚B(i2‚2)為兩點,則點P(i‚)在上述兩點確定的直線上。而工程上常用的為i在i1‚i2之
注意:
(1)「內插法」的原理是根據等比關系建立一個方程,然後解方程計算得出所要求的數據。例如:假設與A1對應的數據是B1,與A2對應的數據是B2,A介於A1和A2之間,已知與A對應的數據是B,則可以按照(A1-A)/(A1-A2)=(B1-B)/(B1-B2)計算得出A的數值。
(2)仔細觀察一下這個方程會看出一個特點,即相對應的數據在等式兩方的位置相同。例如:A1位於等式左方表達式的分子和分母的左側,與其對應的數字B1位於等式右方的表達式的分子和分母的左側。
(3)還需要注意的一個問題是:如果對A1和A2的數值進行交換,則必須同時對B1和B2的數值也交換,否則,計算得出的結果一定不正確。
(2)插值法求平方根c語言實驗報擴展閱讀:
若函數f(x)在自變數x一些離散值所對應的函數值為已知,則可以作一個適當的特定函數p(x),使得p(x)在這些離散值所取的函數值,就是f(x)的已知值。從而可以用p(x)來估計f(x)在這些離散值之間的自變數所對應的函數值,這種方法稱為插值法。
如果只需要求出某一個x所對應的函數值,可以用「圖解內插」。它利用實驗數據提供要畫的簡單曲線的形狀,然後調整它,使得盡量靠近這些點。
如果還要求出因變數p(x)的表達式,這就要用「表格內插」。通常把近似函數p(x)取為多項式(p(x)稱為插值多項式),最簡單的是取p(x)為一次式,即線性插值法。在表格內插時,使用差分法或待定系數法(此時可以利用拉格朗日公式)。在數學、天文學中,插值法都有廣泛的應用。
C. 怎麼用c語言求兩個數的平方根之和詳細步驟
一個表達式就可以出來結果了。
c=sqrt(x)+sqrt(y);
D. 求用c語言編寫牛頓插值法
牛頓插值法:
#include<stdio.h>
#include<alloc.h>
float Language(float *x,float *y,float xx,int n)
{
int i,j;
float *a,yy=0.0;
a=(float *)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
{
a[i]=y[i];
for(j=0;j<=n-1;j++)
if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
free(a);
return yy;
}
void main()
{
float x[4]={0.56160,0.5628,0.56401,0.56521};
float y[4]={0.82741,0.82659,0.82577,0.82495};
float xx=0.5635,yy;
float Language(float *,float *,float,int);
yy=Language(x,y,xx,4);
printf("x=%f,y=%f\n",xx,yy);
getchar();
}
2.牛頓插值法#include<stdio.h>
#include<math.h>
#define N 4
void Difference(float *x,float *y,int n)
{
float *f;
int k,i;
f=(float *)malloc(n*sizeof(float));
for(k=1;k<=n;k++)
{
f[0]=y[k];
for(i=0;i<k;i++)
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{
int i;
float varx=0.895,b;
float x[N+1]={0.4,0.55,0.65,0.8,0.9};
float y[N+1]={0.41075,0.57815,0.69675,0.88811,1.02652};
Difference(x,(float *)y,N);
b=y[N];
for(i=N-1;i>=0;i--)b=b*(varx-x[i])+y[i];
printf("Nn(%f)=%f",varx,b);
getchar();
}
留下個郵箱,我發給你:牛頓插值法的程序設計與應用
E. 工程常用演算法作業 插值方法 C語言
2424
F. 求雙線性插值法的C語言程序!幫幫忙!拜託各位了!
ab
t
cd
就是兩次線性插值,先在x方向插出t上下方的_t1、_t2,然後再用它們插出t來
floattest(floatx,floaty)
{
float_t1,_t2,t;
_t1=a+(b-a)*(x-ax)/(bx-ax);
_t2=c+(d-c)*(x-cx)/(dx-cx);
t=_t1+(_t2-_t1)*(y-ay);
returnt;
}
G. c語言求平方和平方根
平方直接兩個數相乘即可。
平方根可以通過這個數本身和0之間進行折半查找的方法,對數據進行計算。
當兩數相乘大於這個數時,重置最大值;小於這個數時,重置最小值。由於存在除不盡的數,可以加上一個精度進行判斷。
#include<stdio.h>
#include<math.h>
doublesquareFun(doublex)//平方
{
returnx*x;
}
doublesqrtFun(doublex,intprecision)//開方
{
doublea=0,b=x,mid=x/2,val=pow(10,-precision);
if(x<0)
return-1;
while(true)//循環折半查找
{
if(fabs(mid*mid-x)<=val)//達到進度則退出
break;
if(mid*mid>x)
b=mid;//重置最大值
else
a=mid;//重置最小值
mid=(a+b)/2;
}
returnmid;
}
intmain()
{
doubled=sqrtFun(2,15);
printf("%.15lf ",d);
printf("%.15lf ",squareFun(d));
}
H. 插值法如何計算,請詳解
插值法又稱「內插法」,是利用函數f (x)在某區間中插入若干點的函數值,作出適當的特定函數,在這些點上取已知值,在區間的其他點上用這特定函數的值作為函數f (x)的近似值,這種方法稱為插值法。如果這特定函數是多項式,就稱它為插值多項式。
例如:假設與A1對應的數據是B1,與A2對應的數據是B2,現在已知與A對應的數據是B,A介於A1和A2之間,則可以按照(A1-A)/(A1-A2)=(B1-B)/(B1-B2)計算得出A的數值,其中A1、A2、B1、B2、B都是已知數據。根本不必記憶教材中的公式,也沒有任何規定必須β1>β2驗證如下:根據:(A1-A)/(A1-A2)=(B1-B)/(B1-B2)可知:
(A1-A)=(B1-B)/(B1-B2)×(A1-A2)
A=A1-(B1-B)/(B1-B2)×(A1-A2)
=A1+(B1-B)/(B1-B2)×(A2-A1)
59×(1+r)^-1+59×(1+r)^-2+59×(1+r)^-3+59×(1+r)^-4+(59+1250)×(1+r)^-5=1000(元)這個計算式可以轉變為59×(P/A,r,5)+1250×(P/F,r,5)=1000
當r=9%時,59×3.8897+1250×0.6499=229.4923+812.375=1041.8673>1 000元
當r=12%時,59×3.6048+1250×0.5674=212.6832+709.25=921.9332<1000元
因此, 現值 利率
1041.8673 9%
1000 r
921.9332 12%
(1041.8673-1000)/(1041.8673-921.9332)=(9%-r)/(9%-12%)
解之得,r=10%。
I. 求用C或C++語言計算平方根,要求不使用SQRT函數
一般我們求平方根使用牛頓迭代法,實現代碼如下:
doublenewtonMethod(doubletoBeSqrted){
doublex=1.0;
while(abs(x*x-toBeSqrted)>1e-5){
x=(x+toBeSqrted/x)/2;
}
returnx;
}
還可以用二分查找,這個原理較為簡單,不過演算法復雜度較高。
floatsqrtByBisection(floatn){
if(n<0)
returnn;
floatmid,last;
floatlow,up;
low=0,up=n;
mid=(low+up)/2;
do{
if(mid*mid>n)
up=mid;
else
low=mid;
last=mid;
mid=(up+low)/2;
}while(abs(mid-last)>eps);
returnmid;
}