关于多项式的计算,Help!

tangzhangjie 2001-12-02 07:35:36
问题:
给定一个k,有多项式函数如下:
G(x) = (x-3)(x-(3的二次方))(x-(3的三次方))...(x-(3的k次方)) ;
= A[1]+A[2]x+A[3](x的二次方)...A[k-1](x的k-1次方)+A[k](x的k次方)
求其多项式的系数A[i],i=1,2,...,k
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
starfish 2001-12-03
  • 打赏
  • 举报
回复
组合数学的书上有
starfish 2001-12-03
  • 打赏
  • 举报
回复
用母函数
yushaofeng 2001-12-02
  • 打赏
  • 举报
回复
我的QQ是:47884343
欢迎大家来交流一下!
intfree 2001-12-02
  • 打赏
  • 举报
回复
let
(x-3)(x-3^2)...(x-3^k)=A[k,0]+A[k,1]x^1+...A[k,k]x^k

we have
A[1,0]=-3,A[1,1]=1
A[k,0]=-3^k*A[k-1,0]
A[k,i]=A[k-1,i-1]-3^k*A[k-1,i]
(k>0,i>0)

如果要通项公式:
A[k,0]=-3^k*A[k-1,0]=(-3^k)(-3^(k-1))A[k-2,0]=...
(-3^k)(-3^(k-1))(-3^(k-2))...(-3^1)=(-1)^k*3^[(k+1)*k/2]

A[k,1]=A[k-1,0]-3^k*A[k-1,i]
=(-1)^(k-1)*3^[k*k(k-1)/2]-3^k*A[k-1,i]
然后用某种方法就可以求出A[k,1]的通项公式
理论上又可以类推出A[k,i]的通项公式


如果只是用计算机求值,则前面的递推式就够了


我的数学不好,只能做到这一步了:)
做了一个dll,具有多项式拟合和表达式计算的功能,导出接口如下: /////////////////////////////////// /* 获取帮助信息 strOut:保存帮助文本信息 len:表示strOut的缓存长度 返回值:strOut==NULL或len==0时,strOut不写入内容,返回所需缓冲区长度(包括'\0'结尾符); 否则直接返回len */ EXPORT size_t Help(char* strOut, size_t len); /* 计算不含未知数表达式的值 strIn:预计算的表达式 ret:返回计算结果 IsRad:表达式中含有sin之类的三角函数时,表明是按弧度制还是角度制,TRUE表示弧度制 返回值:表示错误码,0代表计算成功,错误码代表的意思可通过调用ErrorStr函数取得 */ EXPORT int Calculate(const char* strIn, double* ret, BOOL IsRad); /* 计算含有一个未知数表达式(必须以字母x表示)当x等于value时的值 strIn:预计算的表达式 value:x等于value时 ret:返回计算结果 IsRad:表达式中含有sin之类的三角函数时,表明是按弧度制还是角度制,TRUE表示弧度制 返回值:表示错误码,0代表计算成功,错误码代表的意思可通过调用ErrorStr函数取得 */ EXPORT int Function(const char* strIn, double value, double* ret, BOOL IsRad); /* 计算含有一个未知数表达式(必须以字母x表示)当x在区间[low,high)内平均等分为cnt段时各点的值 strIn:预计算的表达式 low:左区间 high:右区间,内部会检查high计算结果的横坐标值 yOut:返回计算结果的纵坐标值 IsRad:表达式中含有sin之类的三角函数时,表明是按弧度制还是角度制,TRUE表示弧度制 返回值:表示错误码,0代表计算成功,错误码代表的意思可通过调用ErrorStr函数取得 */ EXPORT int Function_Interval(const char* strIn, double low, double high, size_t cnt, double* xOut, double* yOut, BOOL IsRad); /* 根据错误码返回其文本描述信息 errNo:错误码,取值范围为[0-9],超过范围时,strOut写入"错误码超过取值范围" strOut:保存错误码的文本信息 len:表示strOut的缓存长度 返回值:strOut==NULL或len==0时,strOut不写入内容,返回所需缓冲区长度(包括'\0'结尾符); 否则直接返回len */ EXPORT size_t ErrorStr(size_t errNo, char* strOut, size_t len); /* 多项式拟合 xIn:输入采样数据横坐标的集合 yIn:输入采样数据纵坐标的集合 cnt:输入采样数据的对数,即xIn或yIn数组内数据个数,函数假设xIn、yIn数组内数据个数一样多 sztCiShu:sztCiShu代表最高次为sztCiShu-1,即待求未知系数个数为sztCiShu个,sztCiShu须不大于cnt aOut:保存未知系数的拟合结果,数组长度为sztCiShu 返回值:表示拟合成功与否 */ EXPORT BOOL Fitting_Double(double* xIn, double* yIn, size_t cnt, size_t sztCiShu, double* aOut); /* 也是多项式拟合,只是拟合结果直接表示成了表达式的字符串形式,写入到strOut中 xIn:输入采样数据横坐标的集合 yIn:输入采样数据纵坐标的集合 cnt:输入采样数据的对数,即xIn或yIn数组内数据个数,函数假设xIn、yIn数组内数据个数一样多 sztCiShu:sztCiShu代表最高次为sztCiShu-1,即待求未知系数个数为sztCiShu个,sztCiShu须不大于cnt strOut:保存未知系数的拟合结果 len:strOut缓冲区的长度 返回值:0表示不能拟合,非零表示能拟合,当: strOut==NULL或len==0时,strOut不写入内容,返回所需缓冲区长度(包括'\0'结尾符,其实内部已计算过一遍); 否则直接返回len(若len不够长,拟合结果

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧