24小时热门版块排行榜    

查看: 2517  |  回复: 22

赵梦92

木虫 (著名写手)

【答案】应助回帖

maple擅长符号运算,但不擅长矩阵处理,而matlab新版融合maple符号运算以后,并两者优势兼而有之,用matlab编码更简捷一些

发自小木虫Android客户端
11楼2016-01-08 13:20:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
loujing: 金币+40, ★★★很有帮助 2016-01-08 17:04:29
看看楼上的某些发言就觉得Mathematica推广工作任重而道远……楼主你这个问题是可以用Mathematica推导的。不过在给出解法前得先和你讨论清楚一件事:你给出的
的表达式是不是错了。我手算和用软件推导(当然编程里面混入了我的分析,或许是我的分析本身不对)的结果都是:
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
12楼2016-01-08 14:38:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

引用回帖:
12楼: Originally posted by xzczd at 2016-01-08 14:38:05
看看楼上的某些发言就觉得Mathematica推广工作任重而道远……楼主你这个问题是可以用Mathematica推导的。不过在给出解法前得先和你讨论清楚一件事:你给出的
w_j的表达式是不是错了。我手算和用软件推导(当然编程 ...

刚不放心所以又带具体的数算了一遍,如果各个式子的定义真的如你所写,那么分母各项的指数毫无疑问就是2j而不是j+1。
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
13楼2016-01-08 14:44:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

loujing

铁杆木虫 (正式写手)

引用回帖:
13楼: Originally posted by xzczd at 2016-01-08 14:44:20
刚不放心所以又带具体的数算了一遍,如果各个式子的定义真的如你所写,那么分母各项的指数毫无疑问就是2j而不是j+1。...

您好,感谢您的回复。w_j最终的闭解,是原书上给出的。所以我想利用软件验证一下。

我在网上搜了一下,李航老师在他新浪博客上给出了勘误表,http://blog.sina.com.cn/s/blog_7ad48fee01017dpi.html,如截图。
勘误表上,原错误w_j的结果分子上是x_i,而我的书上是x_i^j。看来,我这本书是已经修订过的了(购于2015年6月,2015年3月印刷的版本)。
关于用Maple或Mathematica实现符号多项式拟合

您能否将您的代码给出,或将.nb以附件形式上传,让我研究一下,非常感谢。
14楼2016-01-08 17:03:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

loujing

铁杆木虫 (正式写手)

引用回帖:
13楼: Originally posted by xzczd at 2016-01-08 14:44:20
刚不放心所以又带具体的数算了一遍,如果各个式子的定义真的如你所写,那么分母各项的指数毫无疑问就是2j而不是j+1。...

如4楼所贴的书截图一样,一般遇到这种,利用输入x构造增广矩阵X;然后直接得到w的闭解 inv(X'X)X'y。所以还没去细研究过每个w_j到底是什么。

既然书上给出了w_j的闭解形式,又老听说Mathematica可以用来辅助公式推导,我就想用这个练练手的。

还望您能给出源码,谢谢了。
15楼2016-01-08 17:17:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
loujing: 金币+30, ★★★很有帮助 2016-01-08 18:15:58
引用回帖:
14楼: Originally posted by loujing at 2016-01-08 17:03:58
您好,感谢您的回复。w_j最终的闭解,是原书上给出的。所以我想利用软件验证一下。

我在网上搜了一下,李航老师在他新浪博客上给出了勘误表,http://blog.sina.com.cn/s/blog_7ad48fee01017dpi.html,如截图。
...

我觉得你对这段勘误的理解是不是有误……这种勘误格式应该是相当于把wj的表达式整个都从原书里去掉了。总之这里给出我推导出12楼结果的代码及解说。

这个问题总的来说还是很有意思的。楼主的计算之所以会失败大致有两个原因。其一是原推导中不动声色地对抽象求和使用了一些相对特殊的处理,Sum[...w[j], {j, 1, M}]里的w[j]的j其实是个局部变量,仅用于由1遍历至M,而“对w[j]求导”这一运算中的j是一个“可以取值为1到M的任意整数的变量”,也就是说Sum内外的w[j]的所指其实是不同的;其二,Sum在未计算为封闭形式时并不会将内部的常数项自动向外提取(并且似乎也没有哪个化简函数会进行这种操作),一个简单的例子是
CODE:
Sum[1/2 a[b], {b, c, e}]

其中1/2并不会自动计算到外面。这是可以接受的,毕竟这种计算并没有使表达式变得更简单,而对于更一般的情形而言,这种“不变换”甚至可以说是必要的,比如:
CODE:
Sum[ff a[b], {b, c, e}]

这里的ff在表面上虽然是一个常数项,但是考虑到它在后续编程中可能被赋为任何值(包括与b有关的值)所以冒然将它提出显然会引发很多麻烦——于是我们就不难理解Solve为什么会求解失败了:对楼主的问题而言,若要求解方程的话,将符号常量提取到Sum外面无疑是必须的。

好的,说了这么多,我们到底应该怎么在Mathematica中完成这个推导呢?前已述及,直接基于内置函数的推导之所以会失败,是因为这一推导中用到了一些相对特殊的规则,那么,我们自己把这些规则编写出来就可以了,Mathematica核心语言中的模式匹配就是干这个的:
CODE:
Clear[m, n]

f[i_, m_] := Sum[w[j]*x[i]^j, {j, 0, m}]
l = 1/2 Sum[(f[i, m] - y[i])^2, {i, n}];

(*以下规则对应前面提及的第一点*)
rule[w_] := Sum[expr_, {i_, downup__}] /; ! FreeQ[w, i] :> expr
(*以下三条规则对应第二点*)
ruleExpand = Sum[(a_ + b_) c_, i_] :> Sum[(a + b) c // Expand, i];
ruleDistribute = Sum[expr1_ + expr2_, i_] :> Sum[expr1, i] + Sum[expr2, i];
ruleExtract = Sum[a_ b_., {i_, downup__}] /; FreeQ[a, i] :> a Sum[b, {i, downup}];
(*把相应的变换规则代入:*)
D[l /. rule[w@j], w[j]] //. {ruleExpand, ruleDistribute, ruleExtract}
Solve[% == 0, w[j]]

上面这个算是比较中规中矩的编法,其实,还可以更疯狂一点的。(注意,以下内容仅为展示一种可能性,对解决楼主的问题并非必要。)因为在这里D和Sum的固有规则对我们的计算造成了麻烦,那我们何不自己写一套D和Sum呢:
CODE:
rule2[w_] := sum[expr_, {i_, downup__}] /; ! FreeQ[w, i] :> expr

(*d[a_ +b_,x_]:=d[a,x]+d[b,x]*)
d[a_ b_, x_] /; FreeQ[a, x] := a d[b, x]
d[a_^b_, x_] /; FreeQ[b, x] := b a^(b - 1) d[a, x]
d[sum[expr_, i_], x_] := If[FreeQ[i, x], sum[d[expr, x], i], d[expr, x]]
d[expr_, i_] := D[expr, i]

sum[(a_ + b_) c_, i_] := sum[(a + b) c // Expand, i]
sum[expr1_ + expr2_, i_] := sum[expr1, i] + sum[expr2, i]
sum[a_ b_., {i_, downup__}] /; FreeQ[a, i] := a sum[b, {i, downup}]

f2[i_, m_] := sum[w[j]*x[i]^j, {j, 0, m}]
l2 = 1/2 sum[(f2[i, m] - y[i])^2, {i, n}];

d[l2 /. rule2[w@j], w[j]]

Solve[% == 0, w[j]] /. sum -> Sum

小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
16楼2016-01-08 17:24:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

loujing

铁杆木虫 (正式写手)

引用回帖:
12楼: Originally posted by xzczd at 2016-01-08 14:38:05
看看楼上的某些发言就觉得Mathematica推广工作任重而道远……楼主你这个问题是可以用Mathematica推导的。不过在给出解法前得先和你讨论清楚一件事:你给出的
w_j的表达式是不是错了。我手算和用软件推导(当然编程 ...

原书截图
关于用Maple或Mathematica实现符号多项式拟合-1
关于用Maple或Mathematica实现符号多项式拟合-2
17楼2016-01-08 17:28:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
loujing: 金币+30, ★★★很有帮助 2016-01-08 23:56:20
引用回帖:
17楼: Originally posted by loujing at 2016-01-08 17:28:16
原书截图

...

……刚发现我为了凑出和你的顶楼相似的结果犯了个错误。盯着四楼的图看了半天(真伤眼),现在我基本确定,正确的推导是:
CODE:
f[i_, m_] := Sum[w[j]*x[i]^j, {j, 0, m}]
l = 1/2 Sum[(f[i, m] - y[i])^2, {i, n}];

rulej1[w_] := Sum[expr_, {i_, downup__}] /; ! FreeQ[w, i] :> sum[{i, downup}][expr]
rulej2 = sum[_]'[_] :> 1;
rulej3 = sum[i_][expr_] :> Sum[expr, i];

ruleExpand = Sum[(a_ + b_) c_, i_] :> Sum[(a + b) c // Expand, i];
ruleDistribute = Sum[expr1_ + expr2_, i_] :> Sum[expr1, i] + Sum[expr2, i];
ruleExtract = Sum[a_ b_., {i_, downup__}] /; FreeQ[a, i] :> a Sum[b, {i, downup}];

(D[l /. rulej1[w@j], w[j]] /. {rulej2, rulej3} //. {ruleExpand, ruleDistribute,
     ruleExtract} // Expand) == 0



这和4楼结果是一致的,显然,光靠一个方程是定不了w[j]的,必须联立方程组。w[j]的简单的封闭解是不存在的。
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
18楼2016-01-08 17:59:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzczd

木虫 (小有名气)

【答案】应助回帖

引用回帖:
17楼: Originally posted by loujing at 2016-01-08 17:28:16
原书截图

...

16楼已经说了,这种勘误格式等于是把这一整段从书中删掉了……
小木虫Mathematica版块已毁(当然原本也不咋的),建议大家前往百度贴吧或Stackexchange。
19楼2016-01-08 18:01:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

loujing

铁杆木虫 (正式写手)

引用回帖:
18楼: Originally posted by xzczd at 2016-01-08 17:59:09
……刚发现我为了凑出和你的顶楼相似的结果犯了个错误。盯着四楼的图看了半天(真伤眼),现在我基本确定,正确的推导是:

f := Sum
l = 1/2 Sum;

rulej1 := Sum /; ! FreeQ :> sum
rulej2 = sum' :> ...

追问一下,在得到这里的联立方程组后,符号推导的工作是不是就可以算结束了?

如果接下来,我给出具体的一组(x_i,y_i),如何再利用这里的推导,计算出具体的w_j?
20楼2016-01-08 18:15:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 loujing 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 311求调剂 +5 26研0 2026-03-15 5/250 2026-03-16 16:21 by a不易
[考研] 中科院材料273求调剂 +4 yzydy 2026-03-15 4/200 2026-03-16 15:59 by Gaodh_82
[考研] 材料与化工专硕调剂 +3 heming3743 2026-03-16 3/150 2026-03-16 15:05 by peike
[考研] 326求调剂 +3 mlpqaz03 2026-03-15 3/150 2026-03-16 07:33 by Iveryant
[考研] 26考研一志愿中国石油大学(华东)305分求调剂 +3 嘉年新程 2026-03-15 3/150 2026-03-15 13:58 by 哈哈哈哈嘿嘿嘿
[考研] 255求调剂 +3 李嘉慧, 2026-03-12 4/200 2026-03-14 16:58 by 有只狸奴
[考研] 297求调剂 +4 学海漂泊 2026-03-13 4/200 2026-03-14 11:51 by 热情沙漠
[考研] 【0703化学调剂】-一志愿华中师范大学-六级475 +5 Becho359 2026-03-11 5/250 2026-03-14 11:35 by 哦哦123
[考研] 材料080500调剂求收留 +3 一颗meteor 2026-03-13 3/150 2026-03-14 10:54 by peike
[考研] 招收0805(材料)调剂 +3 18595523086 2026-03-13 3/150 2026-03-14 00:33 by 123%、
[考研] 341求调剂 +4 番茄头--- 2026-03-10 4/200 2026-03-13 23:12 by JourneyLucky
[考研] 281求调剂 +9 Koxui 2026-03-12 11/550 2026-03-13 20:50 by Koxui
[考研] 307求调剂 +5 超级伊昂大王 2026-03-12 5/250 2026-03-13 15:56 by 棒棒球手
[考研] 一志愿211化学学硕310分求调剂 +8 努力奋斗112 2026-03-12 9/450 2026-03-13 15:41 by JourneyLucky
[考研] 314求调剂 +7 无懈可击的巨人 2026-03-12 7/350 2026-03-13 15:40 by JourneyLucky
[考研] 求调剂 +3 程雨杭 2026-03-12 3/150 2026-03-13 15:06 by JourneyLucky
[考研] 085600材料与化工 309分请求调剂 +7 dtdxzxx 2026-03-12 8/400 2026-03-13 14:43 by jxchenghu
[考研] 070303一志愿西北大学学硕310找调剂 +3 d如愿上岸 2026-03-13 3/150 2026-03-13 10:43 by houyaoxu
[考博] 26读博 +4 Rui135246 2026-03-12 10/500 2026-03-13 07:15 by gaobiao
[考研] 085602化工求调剂 +7 董boxing 2026-03-10 7/350 2026-03-10 17:07 by BruceLiu320
信息提示
请填处理意见