⑴ 怎樣用c語言表示反正弦,反餘弦,反正切函數呢
計算反正切函數(使用歐拉變換公式,精度很高),反正切函數的級數展開公式:
f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...
當|x| > 1時,級數絕對值發散,無法直接使用歐拉公式計算。因此可以通過下面的公式
進行等價轉換之後再進行計算。
等價轉換公式:
a) ATan(1/x) = Pi/2 - ATan(x)
b) ATan(-x) = - ATan(x)
特殊情況
0 = ArcTan(0)
Pi/2 = ArcTan(無窮大)
//
// 歐拉公式
//
// sum是和,term是通項值,jterm初始為1,以後按1遞增。wrksp是工作單元,視jterm的
// 最大值而定。
//
void eulsum(int& nterm,double *sum,double term,int jterm,double wrksp[])
{
double tmp,m;
if(jterm == 1)
{
nterm = 1;
wrksp[1] = term;
*sum = 0.5 * term;
}
else
{
tmp = wrksp[1];
wrksp[1] = term;
for(int j=1; j <= nterm; j++)
{
m = wrksp[j+1];
wrksp[j+1] = 0.5 * (wrksp[j] + tmp);
tmp = m;
}
if(fabs(wrksp[nterm + 1]) <= fabs(wrksp[nterm]))
{
*sum = *sum + 0.5 * wrksp[nterm + 1];
nterm = nterm + 1;
}
else
{
*sum = *sum + wrksp[nterm + 1];
}
}
}
級數計算就不用我給代碼了吧。
⑵ c語言怎樣輸入對數
#include<stdio.h>
#include <math.h>
void main()
{
float x=5,y;
y=log(x);
printf("%f ",y);
}
(2)c語言lm擴展閱讀:
C語言中使用對數函數的方法
log()函數:返回以e為底的對數值
頭文件:
1#include
log() 函數返回以 e 為底的對數值,其原型為:
1doublelog(doublex);
log()用來計算以e為底的 x 的對數值,然後將結果返回。設返回值為 ret,則
1x = eret
如果 x 為負數或 0,則會發生錯誤並設置 errno 值。錯誤代碼:
EDOM:參數x 為負數;
ERANGE:參數x
為零值,零的對數值無定義。
注意:使用 GCC 編譯時請加入-lm。
⑶ 求用C語言編的LM擬合演算法(Levenberg-Marquardt 演算法)
http://wenku..com/link?url=__T_FJ94kfzm1wmvsr7MlDifKLT7ZWcG
⑷ c語言的開方函數
(1)函數頭文件:math.h;
(2)函數功能: 計算一個非負實數的平方根;
(3)函數原型:double sqrt(double);
(4)參數介紹:()中是double,返回值可能是double 也可能是int;
(5)函數應用:sqrt系Square Root Calculations(平方根計算),通過這種運算可以考驗CPU的浮點能力。
⑸ C語言用gedit編程結束用gcc編譯時輸入-lm是為了什麼比如程序是a.c,編譯gcc a.c -lm。在線等!
那是因為你的程序裡面用到了數學函數吧?
也就是說用到了<math.h>
在gcc裡面,需要手動鏈接數學函數庫,所以要加上那句
純手打
謝謝採納
⑹ C語言中關於英尺、英寸、厘米的換算
(foot+inch/12)*0.3048 = cm / 100
foot+inch/12 = cm / (100 * 0.3048) = cm / 30.48
因為1foot = 12inch,所以inch / 12 < 1,所以foot = cm/30.48的整數部分 inch / 12 = cm/30.48的小數部分。
六七行就是完成這個功能。
(6)c語言lm擴展閱讀:
一、英尺和英寸的知識
1、1碼 = 3英寸 ,1英尺 = 12 英寸;
2、碼英文字母是 yard
3、英尺英文字母是 foot( 單數 ) feet( 復數 )
4、英寸英文單詞是 inch ( 單數 )inches( 復數 )
二、長度單位轉換
#include<stdio.h>
#define Mile_to_meter 1609 //1英里 = 1690米
#define Foot_to_centimeter 30.48 //1英里 = 1690米
#define Inch_to_centimeter 2.54 //1英里 = 1690米
int main(){
float mile, foot, inch;
scanf("%f%f%f", &mile, &foot, &inch);
printf("%fmiles = %f meters ", mile, mile * Mile_to_meter);
printf("%ffeet = %f centimeters ", foot, foot * Foot_to_centimeter );
printf("%finches = %f centimeters ", inch, inch * Inch_to_centimeter );
return 0;
}
⑺ c語言反正切
C語言中之數學函數
C語言提供了以下的數學函數,要使用這些函數時,在程序文件頭必須加入:
#include <math.h>
編譯時,必須加上參數「-lm」(表示連結至數學函式庫),例如「gcc -lm test.c」。
函數之自變數與傳回之值型別見自變數或函數前之型別宣告。
函數已經在「math.h」或其它標頭檔宣告過了,因此在使用時不必再加型別宣告,例如「y=sin(x);」,不用寫成「y=double sin(double x);」。
函數說明
double sin(double x)
x 的正弦函數值
double cos(double x)
x 的餘弦函數值
double tan(double x)
x 的正切函數值
double asin(double x)
x 的反正弦函數值 sin-1x,x的值在 [-1,1] 之間,傳回的值在 [-p/2,p/2] 之間
double acos(double x)
x 的反餘弦函數值cos-1x,x的值在 [-1,1] 之間,傳回的值在 [-p/2,p/2] 之間
double atan(double x)
x 的反正切函數值tan-1x,傳回的值在 [-p/2,p/2] 之間
double atan2(double y, double x)
y/x 的反正切函數值tan-1(y/x),傳回的值在 [-p, p] 之間
double sinh(double x)
x 的雙曲正弦函數值
double cosh(double x)
x 的雙曲餘弦函數值
double tanh(double x)
x 的雙曲正切函數值
double exp(double x)
x 的指數函數 ex
double log(double x)
x 的自然對數 ln(x),x > 0
double log10(double x)
x 底數為 10 的對數,log10x,x > 0
double pow(double x, double y)
x 的 y 次方 xy
double sqrt(double x)
x 的根號值 √x
double ceil(double x)
不小於 x 的最小整數(但其型別為 double)
double floor(double x)
不大於 x 的最大整數(但其型別為 double)
int abs(int x)
整數 x 的絕對值 |x|
long labs(long x)
長整數 x 的絕對值 |x|
double fabs(double x)
實數 x 的絕對值 |x|
⑻ c語言中的開方
頭文件:#include <math.h>
sqrt() 用來求給定值的平方根,其原型為:double sqrt(double x);double sqrt(double x)。
x 為要計算平方根的值。
如果 x < 0,將會導致 domain error 錯誤,並把全局變數 errno 的值為設置為 EDOM。
返回 x 平方根。注意,使用 GCC 編譯時請加入-lm。實例計算200 的平方根值。
例子:
#include <math.h>main(){double root;root = sqrt(200);printf("answer is %f ", root);}
輸出結果:answer is 14.142136。
(8)c語言lm擴展閱讀:
使用sqrt函數需要注意的事項:
1、sqrt函數運行的是結果是算術平方根,即不能運算處負數值,也不能輸出虛數結果。如需要得到算術平方根中的負數值,則應該在sqrt函數前添加負號。
2、sqrt函數的參數必須是非負數值,如果是負數值,則輸出會報錯,即數值無效;如果參數是未定義的非數字變數,則按回車後也會報錯,即變數名有誤。
3、sqrt函數的計算精度與C語言設置的精度有關,可以通過設置更改精度。
⑼ 如何用c語言來編寫lm629中busy bit 的程序,謝謝。
用作micromouse(電腦鼠),
⑽ 用C語言表示反正弦,反餘弦,反正切函數
計算反正切函數(使用歐拉變換公式,精度很高),反正切函數的級數展開公式:
f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...
當|x| > 1時,級數絕對值發散,無法直接使用歐拉公式計算。因此可以通過下面的公式
進行等價轉換之後再進行計算。
等價轉換公式:
a) ATan(1/x) = Pi/2 - ATan(x)
b) ATan(-x) = - ATan(x)
特殊情況
0 = ArcTan(0)
Pi/2 = ArcTan(無窮大)
//
// 歐拉公式
//
// sum是和,term是通項值,jterm初始為1,以後按1遞增。wrksp是工作單元,視jterm的
// 最大值而定。
//
void eulsum(int& nterm,double *sum,double term,int jterm,double wrksp[])
{
double tmp,m;
if(jterm == 1)
{
nterm = 1;
wrksp[1] = term;
*sum = 0.5 * term;
}
else
{
tmp = wrksp[1];
wrksp[1] = term;
for(int j=1; j <= nterm; j++)
{
m = wrksp[j+1];
wrksp[j+1] = 0.5 * (wrksp[j] + tmp);
tmp = m;
}
if(fabs(wrksp[nterm + 1]) <= fabs(wrksp[nterm]))
{
*sum = *sum + 0.5 * wrksp[nterm + 1];
nterm = nterm + 1;
}
else
{
*sum = *sum + wrksp[nterm + 1];
}
}
}
級數計算就不用我給代碼了吧。