📜  程序来寻找sin(nΘ)的值

📅  最后修改于: 2021-05-04 13:41:37             🧑  作者: Mango

给定sin(Θ)的值和变量n <= 15。任务是使用三角函数的属性找到sin(nΘ)的值。
例子

Input: sin(Θ)=0.5, n=1
Output: 0.5

Input: sin(Θ)=0.5, n=10
Output: -0.866025

方法:可以使用De moivre定理二项式定理解决此问题

    \begin{document} Using De-Moivre's theorem, we have- \begin{align*} \cos(n\theta)+\iota \sin(n\theta)&=(\cos \theta+\iota \sin \theta)^n\\ &=\cos^n \theta +\binom{n}{1} \cos^{n-1} \theta (\iota \sin \theta)+\binom{n}{2} \cos^{n-2} \theta (\iota \sin \theta)^2+\\ & \binom{n}{3} \cos^{n-3} \theta (\iota \sin \theta)^3+ \cdots \\ \end{align*} Equating the result to imaginary part to get the value of $\sin n\theta$ finally, we got-\\ $\sin (n \theta)=\binom{n}{1}\cos^{n-1}\theta \sin \theta-\binom{n}{3}\cos^{n-3}\theta \sin^3 \theta+\binom{n}{5}\cos^{n-5}\theta \sin^5 \theta- \cdots$\\ As we have value of $\sin \theta$, \\ we can find value of $\cos \theta $\\ $$\cos \theta=\sqrt{1-\sin^2 \theta}$$ \end{document}

现在,我们既有sin(Θ)又有cos(Θ)。将值放在等式中即可得到答案。
下面是上述方法的实现:

C++
// C++ Program to find the value of sin(n?)
#include 
#define ll long long int
#define MAX 16
using namespace std;
ll nCr[MAX][MAX] = { 0 };
 
// This function use to calculate the
// binomial cofficient upto 15
void binomial()
{
    // use simple DP to find cofficient
    for (int i = 0; i < MAX; i++) {
        for (int j = 0; j <= i; j++) {
            if (j == 0 || j == i)
                nCr[i][j] = 1;
            else
                nCr[i][j] = nCr[i - 1][j] + nCr[i - 1][j - 1];
        }
    }
}
 
// Function to find the value of
double findCosNTheta(double sinTheta, ll n)
{
    // find cosTheta from sinTheta
    double cosTheta = sqrt(1 - sinTheta * sinTheta);
 
    // store required answer
    double ans = 0;
    // use to toggle sign in sequence.
    ll toggle = 1;
    for (int i = 1; i <= n; i += 2) {
        ans = ans + nCr[n][i] * pow(cosTheta, n - i)
                        * pow(sinTheta, i) * toggle;
        toggle = toggle * -1;
    }
    return ans;
}
 
// Driver code.
int main()
{
    binomial();
    double sinTheta = 0.5;
    ll n = 10;
 
    cout << findCosNTheta(sinTheta, n) << endl;
 
    return 0;
}


Java
// Java Program to find the value of sin(n?)
 
public class GFG {
     
    private static final int MAX = 16;
    static long nCr[][] = new long [MAX][MAX];
     
    // This function use to calculate the
    // binomial coefficient upto 15
    static void binomial()
    {
        // use simple DP to find cofficient
        for (int i = 0; i < MAX; i++) {
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i)
                    nCr[i][j] = 1;
                else
                    nCr[i][j] = nCr[i - 1][j] + nCr[i - 1][j - 1];
            }
        }
    }
     
    // Function to find the value of
    static double findCosNTheta(double sinTheta, int n)
    {
        // find cosTheta from sinTheta
        double cosTheta = Math.sqrt(1 - sinTheta * sinTheta);
     
        // store required answer
        double ans = 0;
        // use to toggle sign in sequence.
        long toggle = 1;
        for (int i = 1; i <= n; i += 2) {
            ans = ans + nCr[n][i] * Math.pow(cosTheta, n - i)
                            * Math.pow(sinTheta, i) * toggle;
            toggle = toggle * -1;
        }
        return ans;
    }
     
 
     
    // Driver code
    public static void main (String args[]){
            binomial();
            double sinTheta = 0.5;
            int n = 10;
             
            System.out.println(findCosNTheta(sinTheta, n));
    }
 
// This code is contributed by ANKITRAI1
}


Python3
# Python3 program to find the
# value of sin(n-theta)
 
import math
MAX=16
nCr=[[0 for i in range(MAX)] for i in range(MAX)]
 
# Function to calculate the binomial
# cofficient upto 15
def binomial():
     
    # use simple DP to find cofficient
    for i in range(MAX):
        for j in range(0,i+1):
            if j == 0 or j == i:
                nCr[i][j] = 1
            else:
                nCr[i][j] = nCr[i - 1][j] + nCr[i - 1][j - 1]
 
# Function to find the value of cos(n-theta)
def findCosNTheta(sinTheta,n):
     
    # find sinTheta from sinTheta
    cosTheta = math.sqrt(1 - sinTheta * sinTheta)
     
    # to store required answer
    ans = 0
     
    # use to toggle sign in sequence.
    toggle = 1
    for i in range(1,n+1,2):
        ans = (ans + nCr[n][i]*(cosTheta**(n - i))
              *(sinTheta**i) * toggle)
        toggle = toggle * -1
    return ans
     
# Driver code
if __name__=='__main__':
    binomial()
    sinTheta = 0.5
    n = 10
    print(findCosNTheta(sinTheta, n))
     
# this code is contributed by sahilshelangia


C#
// C# Program to find the value of sin(n?)
using System;
 
class GFG
{
 
private static int MAX = 16;
static long[,] nCr = new long [MAX, MAX];
 
// This function use to calculate the
// binomial coefficient upto 15
static void binomial()
{
    // use simple DP to find cofficient
    for (int i = 0; i < MAX; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (j == 0 || j == i)
                nCr[i, j] = 1;
            else
                nCr[i, j] = nCr[i - 1, j] +
                            nCr[i - 1, j - 1];
        }
    }
}
 
// Function to find the value of cos(n-theta)
static double findCosNTheta(double sinTheta, int n)
{
    // find cosTheta from sinTheta
    double cosTheta = Math.Sqrt(1 - sinTheta *
                                    sinTheta);
 
    // store required answer
    double ans = 0;
     
    // use to toggle sign in sequence.
    long toggle = 1;
    for (int i = 1; i <= n; i += 2)
    {
        ans = ans + nCr[n, i] * Math.Pow(cosTheta, n - i) *
                                Math.Pow(sinTheta, i) * toggle;
        toggle = toggle * -1;
    }
    return ans;
}
 
// Driver code
public static void Main ()
{
    binomial();
    double sinTheta = 0.5;
    int n = 10;
     
    Console.Write(findCosNTheta(sinTheta, n));
}
}
 
// This code is contributed by ChitraNayal


PHP


Javascript


输出:
-0.866025