楼主: Morris_
1194 5

[问答] 根据输入的整数n自动定义n个函数 [推广有奖]

  • 0关注
  • 0粉丝

高中生

12%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
1.0003
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
85 点
帖子
10
精华
0
在线时间
28 小时
注册时间
2019-3-26
最后登录
2020-3-11

楼主
Morris_ 发表于 2019-4-10 19:46:50 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如何一次性定义多个函数(根据给定的整数n,定义n个函数),这些函数可由前面的函数表示(如图片所示):
<br>
定义:P1(x),P2(x),P3(x),...,Pn(x)
1554896816418649.jpeg
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:函数表示 一次性

回帖推荐

zhou1_20 发表于2楼  查看完整内容

参考下吧

沙发
zhou1_20 发表于 2019-4-11 21:19:33
参考下吧
  1. ite_fun=function(x,m){
  2.   n=length(x)
  3.   p=matrix(NA,nrow = n,ncol = m+1)
  4.   p[,1]=1;p[,2]=x-mean(x)
  5.   p[,3]=p[2]^2-(n^2-1)/12
  6.   for (k in 3:m) {
  7.     p[,k+1]=p[,2]*p[,k]-(k^2*(n^2-k^2))/(4*(4*k^2-1))*p[,k-1]
  8.   }
  9.   return(p)
  10. }
  11. x=1:10
  12. ite_fun(x,3)
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
Morris_ 发表于 2019-4-13 10:11:21
zhou1_20 发表于 2019-4-11 21:19
参考下吧
非常感谢您的回答!这样将函数计算结果存放起来,后续直接使用很方便。
根据正交多项式的使用特点,我稍稍做了修改,修改后代码如下:
ite_fun2=function(n,m){
  #n:数据维数;m:正交多项式最高项次数
  x <- c(1:n)
  p=matrix(NA,nrow = n,ncol = m+1)
  p[,1]=1;p[,2]=x-mean(x)
  p[,3]=p[2]^2-(n^2-1)/12
  for (k in 3:m) {
    p[,k+1]=p[,2]*p[,k]-(k^2*(n^2-k^2))/(4*(4*k^2-1))*p[,k-1]
  }
  return(p)
}
再次向您表示感谢!

板凳
Morris_ 发表于 2019-4-13 10:11:43
zhou1_20 发表于 2019-4-11 21:19
参考下吧
非常感谢您的回答!这样将函数计算结果存放起来,后续直接使用很方便。
根据正交多项式的使用特点,我稍稍做了修改,修改后代码如下:
ite_fun2=function(n,m){
  #n:数据维数;m:正交多项式最高项次数
  x <- c(1:n)
  p=matrix(NA,nrow = n,ncol = m+1)
  p[,1]=1;p[,2]=x-mean(x)
  p[,3]=p[2]^2-(n^2-1)/12
  for (k in 3:m) {
    p[,k+1]=p[,2]*p[,k]-(k^2*(n^2-k^2))/(4*(4*k^2-1))*p[,k-1]
  }
  return(p)
}
再次向您表示感谢!

报纸
Morris_ 发表于 2019-4-13 11:36:29
zhou1_20 发表于 2019-4-11 21:19
参考下吧
再向您请教一个问题:
代码中for循环:
for (k in 3:m) {
    p[,k+1]=p[,2]*p[,k]-(k^2*(n^2-k^2))/(4*(4*k^2-1))*p[,k-1]
  }
是否可以使用sapply函数替代。
我试验了多种方式:

但都不能完成以上for循环的功能。
在查看sapply函数帮助文件时,我发现这么一段:
Simplification in sapply is only attempted if X has length greater than zero and if the return values from all elements of X are all of the same (positive) length. If the common length is one the result is a vector, and if greater than one is a matrix with a column corresponding to each element of X.
代码sapply中的x=3:m,x每个元素公共长度为1,一次sapply只能返回一个向量,所以产生了上述图片中的错误,请问是这个原因吗?应如何去解决上面的问题呢?

地板
Morris_ 发表于 2019-4-13 11:39:16
sapply(3:m,function(k){
+   p[,k+1]=p[,2]*p[,k]-(k^2*(n^2-k^2))/(4*(4*k^2-1))*p[,k-1]
+ })
            [,1] [,2] [,3]
[1,]  44.196429   NA   NA
[2,]  34.375000   NA   NA
[3,]  24.553571   NA   NA
[4,]  14.732143   NA   NA
[5,]   4.910714   NA   NA
[6,]  -4.910714   NA   NA
[7,] -14.732143   NA   NA
[8,] -24.553571   NA   NA
[9,] -34.375000   NA   NA
[10,] -44.196429   NA   NA

sapply(3:m,function(k){
+   re=p[,2]*p[,k]-(k^2*(n^2-k^2))/(4*(4*k^2-1))*p[,k-1]
+   return(re)
+ })
            [,1] [,2] [,3]
[1,]  44.196429   NA   NA
[2,]  34.375000   NA   NA
[3,]  24.553571   NA   NA
[4,]  14.732143   NA   NA
[5,]   4.910714   NA   NA
[6,]  -4.910714   NA   NA
[7,] -14.732143   NA   NA
[8,] -24.553571   NA   NA
[9,] -34.375000   NA   NA
[10,] -44.196429   NA   NA

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 17:57