18957.计算自然对数ln(x)的导数
Description
求自然对数ln(x)的导数,输入双精度实数x>=1,输出自然对数ln(x)的导数(精确到小数点后2位有效数,小数点后第2位四舍五入所得)。
输入格式
m(整数,实验数据总数)
x1(实数,自然对数ln(x)的自变量)
X2实数,自然对数ln(x)的自变量)
...
xm(实数,自然对数ln(x)的自变量)
输出格式
y1(实数,自然对数ln(x1)的导数)
y2实数,自然对数ln(x2)的导数)
...
ym(实数,自然对数ln(xm)的导数)
输入样例
3
1.0
2.0
3.0
输出样例
1.00
0.50
0.33
代码:
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
double ln(int x){
double h=0.32;
for(int i=0;i<20;i++){
h/=2.0;
}
return log((x+h)/x)/h;
}
int main()
{
int m;
scanf("%d",&m);
double x[100];
for(int i=0;i<m;i++){
scanf("%lf",&x[i]);
}
for(int i=0;i<m;i++){
printf("%.2f\n",ln(x[i]));
}
return 0;
}
18991 实验1.2 调和级数求和
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
double sumHSDL(int h){
double sum=0;
for(int i=1;i<=h;i++){
sum+=1.0/i;
}
return sum;
}
double sumHSDR(int h){
double sum=0;
for(int i=h;i>=1;i--){
sum+=1.0/i;
}
return sum;
}
int main()
{
int m;
cin>>m;
vector<int> k;
int a;
for(int i=0;i<m;i++){
cin>>a;
k.push_back(a);
}
for(int i=0;i<m;i++){
printf("%.14f ",sumHSDL(k[i]));
printf("%.14f\n",sumHSDR(k[i]));
}
return 0;
}
18996 求正弦函数值
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define PI 3.1415926535897932l
int GetSinItemNumber(double x)
{ int N;
if(x<0)x=-x;
if(x<=PI/8) N=6;
else if(x<=PI/4) N=8;
else if(x<=PI/2) N=10;
else if(x<=3*PI/4) N=12;
else N=14;
return N;
}
double SINTV(double x)
{ int K,N;
double y=1.0,xx=0.0,temp;
N=GetSinItemNumber(x);
K=N*2;
xx=x*x;
while(K>0)
{ y=1.0-y*xx/K/(K+1);
K-=2;
}
return y*x;
}
int main()
{
int m;
scanf("%d",&m);
double x[100];
for(int i=0;i<m;i++){
scanf("%lf",&x[i]);
}
for(int i=0;i<m;i++){
printf("%.14lf\n",SINTV(x[i]));
}
return 0;
}
18997 求余弦函数值
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
#define PI 3.1415926535897932l
int GetSinItemNumber(double x)
{ int N;
if(x<0)x=-x;
if(x<=PI/8) N=6;
else if(x<=PI/4) N=8;
else if(x<=PI/2) N=10;
else if(x<=3*PI/4) N=12;
else N=14;
return N;
}
double COSTV(double x)
{ int K,N;
double y=1.0,xx;
N=GetSinItemNumber(x)+1;
K=N*2;
xx=x*x;
while(K>0)
{ y=1.0-y*xx/K/(K-1);
K-=2;
}
return y;
}
int main()
{
int m;
scanf("%d",&m);
double x[100];
for(int i=0;i<m;i++){
scanf("%lf",&x[i]);
}
for(int i=0;i<m;i++){
printf("%.14lf\n",COSTV(x[i]));
}
return 0;
}
18998 求对数函数值ln(x)
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MATHLOG 1
#define LOGTWO 0.69314718055994531
#define LOGTEN 2.3025850929940457
#ifndef ZERO
#define ZERO 0.5E-100
#endif
using namespace std;
int GetLogItemNumber(double a)
{ int N;
if(a<=1) N=-1;
else if(a<=1.2) N=7;
else if(a<=1.5) N=10;
else if(a<=2.0) N=15;
else if(a<=3.0) N=24;
else if(a<=10) N=84;
else N=84*(int)(a/10);
return N;
}
double LOGTV(double a)
{ int N=0,K,NK;
double x,xx,y;
x=(a-1)/(a+1);
xx=x*x;
N=GetLogItemNumber(a);
NK=N*2+1;
y=1.0/NK;
for(K=N;K>0;K--)
{ NK-=2;
y =1.0/NK+xx*y;
}
return 2.0*x*y;
}
double LOG(double a)
{ int TYPE=0,K=0;
double x0,x,y,power=2.0;
x=a;
if(x<ZERO) return -100;
if(x<1){x=1.0/x,TYPE=1;}
while(power<x){ power*=2.0;K++;}
y=LOGTV(2.0*x/power)+K*LOGTWO;
if(TYPE==1)y=-y;
return y;
}
int main()
{
int m;
scanf("%d",&m);
double x[100];
for(int i=0;i<m;i++){
scanf("%lf",&x[i]);
}
for(int i=0;i<m;i++){
printf("%.14lf\n",LOG(x[i]));
}
return 0;
}
18999 求指数函数值
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MATHEXP 1
#define EPOW01 2.7182818284590452
#define EPOW02 7.3890560989306502
#define EPOW10 22026.465794806717
double EXPTV(double x)
{ int N=23;
int K=0;
double y=1.0;
if(x<=0.5) N=14; /*See Ch3 Table 7.1*/
else if(x<=1.0) N=18;
else N=23;
for(K=N;K>0;K--)
y=1.0+y*x/K;
return y;
}
double EXP(double x)
{ int TYPE=0;
double y0=1.0;
if(x<0){TYPE=1;x=-x;}
while(1)
{ if(x>10) {x-=10;y0*=EPOW10;}
else if(x>2) {x-=2; y0*=EXPTV(2);}
else break;
}
y0 *=EXPTV(x);
if(TYPE==1) return 1.0/y0;
else return y0;
}
int main()
{
int m;
scanf("%d",&m);
double x[100];
for(int i=0;i<m;i++){
scanf("%lf",&x[i]);
}
for(int i=0;i<m;i++){
printf("%.14lf\n",EXP(x[i]));
}
return 0;
}
19000 二分法解非线性方程
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MN 51
int RN=1;
double ANS,ERR,EPS=0.4E-14;
double A[MN],B[MN],X[MN],Y[MN],E[MN];
double f(double x){return x*x*x-2.0*x-2;}
// double A0=0.0,B0=2.5;
double A0,B0;
int BISECTION(double A0,double B0)
{ double FA;
int K;
FA=f(A0);
A[0]=A0;
B[0]=B0;
X[0]=(A0+B0)/2.0;
Y[0]=f(X[0]);
E[0]=(B0-A0)/2;
for(K=1;K<MN;K++)
{ if(Y[K-1]*FA>0) {A[K]=X[K-1];B[K]=B[K-1];}
else {A[K]=A[K-1];B[K]=X[K-1];}
X[K]=(A[K]+B[K])/2.0;
Y[K]=f(X[K]);
E[K]=(B[K]-A[K])/2;
if(E[K]<EPS) break;
}
int k;
if(K<MN)K++;
RN=K;
ANS=X[RN-1];
ERR=E[RN-1];
for(k=0;k<RN;k++)
{
if(k==RN-1)
printf("%.15f %.15f %.15f\n",A[k],B[k],X[k]);
}
return 0;
}
int main()
{
int m = 1;
scanf("%d", &m);
double x[m], y[m];
for (int i = 0; i < m; i++) {
scanf("%lf %lf", &x[i],&y[i]);
}
for (int i = 0; i < m; i++) {
BISECTION(x[i],y[i]);
}
}
19001 黄金分割求函数最小值
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MN 51
int RN=1;
double OPTX,OPTY,ERR;
double GOLDEN=0.6180339887498948l;
double A[MN],B[MN],AX[MN],BX[MN];
double X1[MN],X2[MN],Y1[MN],Y2[MN];
/* Exam 3.1 */
double EPS=0.4E-8;
double f(double x){return exp(x)-2*x*x;}
int GoldenSection(double A0,double B0)
{
int K;
A[0]=A0;
B[0]=B0;
BX[0]=(B[0]-A[0])*GOLDEN;
AX[0]=BX[0]*GOLDEN;
X2[0]=A[0]+BX[0];
Y2[0]=f(X2[0]);
X1[0]=A[0]+AX[0];
Y1[0]=f(X1[0]);
for(K=1;K<MN;K++)
{ BX[K]=AX[K-1];
AX[K]=BX[K]*GOLDEN;
if(Y1[K-1]<Y2[K-1])
{ A[K]=A[K-1];B[K]=X2[K-1];
X2[K]=X1[K-1];
Y2[K]=Y1[K-1];
X1[K]=A[K]+AX[K];
Y1[K]=f(X1[K]);
}
else
{ A[K]=X1[K-1];B[K]=B[K-1];
X1[K]=X2[K-1];
Y1[K]=Y2[K-1];
X2[K]=A[K]+BX[K];
Y2[K]=f(X2[K]);
}
if(AX[K]<EPS) break;
}
if(K<MN)K++;
RN=K;
ERR=AX[RN-1];
if(Y1[RN-1]<Y2[RN-1])
{ OPTX=X1[RN-1];OPTY=Y1[RN-1];}
else { OPTX=X2[RN-1];OPTY=Y2[RN-1];}
for(K=0;K<RN;K++)
{
if(K==RN-1)
printf("%.9f %.9f %.9f %.9f %.9f %.9f\n",A[K],X1[K],X2[K],B[K],Y1[K],Y2[K]);
// printf("%.9f %.9f %.9f\n",Y1[K],Y2[K],AX[K]);
}
// printf("%.9f %.9f %.9f\n\n",OPTX,OPTY,ERR);
return 0;
}
int main()
{
int m = 1;
scanf("%d", &m);
double x[m], y[m];
for (int i = 0; i < m; i++) {
scanf("%lf %lf", &x[i],&y[i]);
}
for (int i = 0; i < m; i++) {
GoldenSection(x[i],y[i]);
}
}
19020 选列主元约当消元法求线性方程组唯一解
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double b[4][5];
void getm(int k)//选取最大主列
{
double temp;
for(int i=k+1; i<4; i++)
{
if(fabs(b[k][k])<fabs(b[i][k]))
{
for(int a=k; a<5; a++)
{
temp = b[k][a];
b[k][a] = b[i][a];
b[i][a] = temp;
}
}
}
return ;
}
void Uppertriangle()//化上三角就是把对角线下面变成0
{
double x;
for(int i=0; i<3; i++)
{
getm(i);
x = b[i][i];
for(int a=i; a<5; a++)
{
b[i][a] = b[i][a]/x;//化1
}
for(int j=i+1; j<4; j++)
{
x = b[j][i];
for(int a=i; a<5; a++)
{
b[j][a] = b[j][a]-b[i][a]*x;//化0
}
}
}
}
void Lowertriangle()//化下三角就是把对角线上面变成0
{
double x;
for(int i=3; i>0; i--)
{
x = b[i][i];
for(int a=i; a<5; a++)
{
b[i][a] = b[i][a]/x;//把对角线上值系数变成1
}
for(int j=i-1; j>=0; j--)
{
x = b[j][i];
for(int a=j; a<5; a++)
{
b[j][a] = b[j][a]-b[i][a]*x;//在上三角基础上把第i列的第i项之外其他变成0
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
while(n>0)
{
for(int i=0; i<4; i++)
{
for(int j=0; j<5; j++)
{
scanf("%lf",&b[i][j]);
}
}
Uppertriangle();
Lowertriangle();
printf("%0.9lf %0.9lf %0.9lf %0.9lf \n",
b[0][4],b[1][4],b[2][4],b[3][4]);
n--;
}
return 0;
}