首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何写一个Hermite多项式的函数?

如何写一个Hermite多项式的函数?
EN

Stack Overflow用户
提问于 2018-12-06 01:25:22
回答 2查看 869关注 0票数 0

对于用户输入的两个数字xn,我的代码需要找到由以下公式递归定义的Hn(x):

我正在尝试实现该函数的递归版本和迭代版本。但是我想我理解错了,因为我的代码由于H(n)和Hn上的错误而不能编译

代码语言:javascript
复制
#include "pch.h"
#include <iostream>

int H(int n, int x)   //function for recursion
{
if (n < 0) return -1;
else if (n == 0) return 1;
else if (n == 1) return 2 * x;
return 2 * x * H(n) * x - 2 * n * H(n - 1) * x;
}

int H1(int n, int x) //function for Iterator
{
int *H1 = new int[n + 1];

H[0] * x = 1;
H[1] * x = 2 * x;

for (int i = 0; i <= n; i++)
{
    H[i] * x = 2 * x * H[n] * x - 2 * n * H[n - 1] * x;

}
return H1(n) * x;
}

int main()
{
int n, x;
std::cout << "Enter the number n: ";
std::cin >> n;
std::cout << "Enter the number x: ";
std::cin >> x;

std::cout << "Rec = " << H[n] * x std::endl;
std::cout << "Iter = " << H1[n] * x std::endl;
}

这是令人困惑的,我为此道歉,因为我对函数完全陌生。

我已经用斐波那契数列做到了这一点。在这里,我只对函数f(x)使用了一个参数,即f(int n){... },但这里我与函数H(int n, int x)中的两个参数有点混淆,其中nH的索引,而x是一个整数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-06 01:48:23

是的,您需要将按矩阵索引的函数转换为具有两个参数的函数。

递归版本几乎没问题,除了索引中的一些变化:

代码语言:javascript
复制
int H(int n, int x)   // recursive version
{
    if (n <= 0)      
        return -1;
    else if (n == 1) 
        return 1;
    else if (n == 2) 
        return 2 * x;
    else 
        return 2 * x * H(n-1, x) - 2 * n * H(n - 2, x); // shift n+1, n n-1 to n, n-1 n-2 
}

你的迭代版本需要返工,因为如果可能的话,你应该将它写成一个循环,而不需要兑现你不再需要的值。例如:

代码语言:javascript
复制
int Hi(int n, int x) //iterative version
{
    if (n <= 0)      
        return -1;
    else if (n == 1) 
        return 1;

    int am2 = 1;      // start for for n-2
    int am1 = 2*x;    // start for n-1
    if (n == 2) 
        return am1;

    int am; 
    for (int i=3; i<=n; i++) {
        am = 2*x*am1 -  2*i*am2;   // calculate Hn from Hn-1 and Hn-2
        //prepare next interation
        am2=am1; 
        am1=am;
    }
    return am; 
}

Online demo

票数 1
EN

Stack Overflow用户

发布于 2018-12-06 01:51:41

你写道:

代码语言:javascript
复制
int H(int n, int x)   //function for recursion
{
    if (n < 0) return -1;
    else if (n == 0) return 1;
    else if (n == 1) return 2 * x;
    return 2 * x * H(n) * x - 2 * n * H(n - 1) * x;
}

你离工作程序不远了。删除H1函数。让我们看看:

代码语言:javascript
复制
int H(int n, int x)
{
    switch(n)
    {
    // H_0(x) = 1 
    case 0: return 1;
    // H_1(x) = 2x
    case 1: return 2 * x;
    // H_{n+1}(x) = 2x H_n(x) - 2n H_{n - 1}(x)
    default:
        return 2*x*H(n-1, x) - 2*(n-1)*H(n-2, x);
    }
}

技巧部分是认识到H_{n+1}(x) = 2x H_n(x) - 2n H_{n - 1}(x)return 2*x*H(n-1, x) - 2*(n-1)*H(n-2, x);中的n是不一样的,它们有一个不同。

现在,您只需要处理用户I/O,并使用用户输入调用H函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53637670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档