RUC_JudgeOnline 1003 计算cosx和sinx的近似值

计算cosx和sinx的近似值

Description

遍一个程序计算sinx和cosx的近似值,使用如下的台劳级数:

舍去的绝对值应小于ε

Input

输入文件包括2个实数x,ε,两个数间有一空格。

Output

输出文件共两行
第一行输出sinx的近似值
第二行输出cosx的近似值

Sample Input

 

5 0.001

 

Sample Output

 

-0.958776 0.284221

 

Source

习题06-01

 

问题分析:

这个题目是对公式的理解和实现。通过观察,发现一下的规律。

1.每一项的组成形式是X^K/K!;

2.每一项的符号与K有关。Kmod4为1,4的是正的,Kmod4为2,3的是负的;

3.sin是K为奇数时候的累加,cos是K为偶数时候的累加;

4.对于X的初值的处理,需要将这个数字转换成2*pi以内的数。

解决方案:

用一个while循环控制程序。维护里面的条件是单项的值小于给出的初值。对if进行一个奇数偶数的判断,可以在一个循环中完成对sinx和cosx的叠加分配。我使用了一个子函数item专门来计算每一项的值。在计算的时候使用一个大小为K的循环,来计算X^K/K!。具体的可以见参考程序。

参考程序:

#include<stdio.h>
#include<math.h>
const double pi=3.1415926;             //define pi 

double item(int n);
double x;

int main()
{ 
        scanf("%lf",&x);
        double e;
        scanf("%lf",&e);
        x=x-(floor(x/(2*pi)))*(2*pi);  //change x to 0~2*pi 

        double sinx=0.0;
        double cosx=0.0;
        int n=0;
        double now=item(n);            //here we can change to do……while      

        while(fabs(now)>e)
        {
                 if(n%2==0) {       	     // if n%2==0 cosx+ else sinx+                   
                cosx=cosx+now;
                }
                 else{
                 sinx=sinx+now;
                }
                 n++;
                 now=item(n);
        }
        printf("%lf\n",sinx);
        printf("%lf\n",cosx);
        return 0;
}

double item(int k)
{
        double ans=1.0;
        int i;
        for(i=1;i<=k;i++) {             //here to cal X^K/K!         
                ans*=x;
                ans/=i;
        }
        if(k%4==2||k%4==3)
        {
                ans=-ans;
        }
        return ans;

}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为AI语言模型,我无法直接绘制图表。但是我可以提供一些Python代码,希望能够帮到您。 首先,我们需要导入一些库: ```python from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt ``` 然后,我们加载数据集并将其划分为训练集和测试集: ```python # 加载数据集 data = load_wine() # 划分数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42) ``` 接下来,我们使用逻辑回归模型进行训练和预测,并绘制RUC曲线: ```python # 训练逻辑回归模型 model = LogisticRegression() model.fit(X_train, y_train) # 预测测试集数据 y_pred = model.predict_proba(X_test)[:,1] # 计算假正率和真正率,并绘制RUC曲线 fpr, tpr, thresholds = roc_curve(y_test, y_pred) roc_auc = auc(fpr, tpr) plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='RUC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic') plt.legend(loc="lower right") plt.show() ``` 这样就可以得到一个RUC曲线图表了。您可以根据您的需求进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值