青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
    今天看到了校內(nèi)上一個(gè)batman equation,覺(jué)得很順不舒服。第一個(gè)是因?yàn)槲矣X(jué)得那個(gè)圖是錯(cuò)的,第二個(gè)是因?yàn)檫@讓我開(kāi)始思考如何對(duì)任意的f(x, y)進(jìn)行繪制。其實(shí)這是個(gè)很困難的問(wèn)題。但是如果我假設(shè)f(x, y)是處處可微的,那么問(wèn)題說(shuō)不定會(huì)簡(jiǎn)單一點(diǎn)。因此今天晚上就忍不住開(kāi)始寫了。我的想法是,對(duì)于屏幕上的所有點(diǎn),分別令x或者y等于該點(diǎn)的其中一個(gè)坐標(biāo)元素,對(duì)f(x, y)的的另一個(gè)自變量做牛頓迭代法。這樣所有的點(diǎn)最后就會(huì)收斂到一個(gè)點(diǎn)集,然后我把它畫出來(lái),大概就是函數(shù)圖象了吧。

    不過(guò)因?yàn)殚_(kāi)始思考的時(shí)候已經(jīng)晚了,所以今天就只寫了一點(diǎn)點(diǎn)代碼,用C#,可以在Vczh Library++3.0的Candidate\Games\FunctionVisualizer找到(啊,我就是喜歡把代碼都往Candidate里面塞)。現(xiàn)在完成的有,對(duì)于一個(gè)可以包含空格的表達(dá)式e,我把它語(yǔ)法分析稱語(yǔ)法樹(shù),然后再對(duì)x和y求導(dǎo),就得到了三顆語(yǔ)法樹(shù)。然后我對(duì)他進(jìn)行化簡(jiǎn),就得到了六棵語(yǔ)法樹(shù)。當(dāng)然這個(gè)化簡(jiǎn)只是簡(jiǎn)單的,并沒(méi)有對(duì)函數(shù)的組合進(jìn)行處理。

    偉大的C#也是可以用指針的,啊哈哈哈哈,下面是語(yǔ)法分析的代碼:
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using FvCalculation.OperatorExpressions;
  6 using FvCalculation.PrimitiveExpressions;
  7 
  8 namespace FvCalculation
  9 {
 10     unsafe static class ExpressionParser
 11     {
 12         private static void SkipSpaces(char** input)
 13         {
 14             while (char.IsWhiteSpace(**input))
 15             {
 16                 (*input)++;
 17             }
 18         }
 19 
 20         private static bool Char(char** input, char c)
 21         {
 22             SkipSpaces(input);
 23             if (**input == c)
 24             {
 25                 (*input)++;
 26                 return true;
 27             }
 28             else
 29             {
 30                 return false;
 31             }
 32         }
 33 
 34         private static double Number(char** input)
 35         {
 36             SkipSpaces(input);
 37             bool dotted = false;
 38             string s = "";
 39             while (true)
 40             {
 41                 if ('0' <= **input && **input <= '9')
 42                 {
 43                     s += **input;
 44                     (*input)++;
 45                 }
 46                 else if ('.' == **input && !dotted)
 47                 {
 48                     dotted = true;
 49                     s += **input;
 50                     (*input)++;
 51                 }
 52                 else
 53                 {
 54                     break;
 55                 }
 56             }
 57             if (s == "")
 58             {
 59                 return double.NaN;
 60             }
 61             else
 62             {
 63                 return double.Parse(s);
 64             }
 65         }
 66 
 67         private static string Name(char** input)
 68         {
 69             SkipSpaces(input);
 70             string s = "";
 71             while (true)
 72             {
 73                 if (('a' <= **input && **input <= 'z'|| ('A' <= **input && **input <= 'Z'|| ('_' == **input) || (s != "" && '0' <= **input && **input <= '9'))
 74                 {
 75                     s += **input;
 76                     (*input)++;
 77                 }
 78                 else
 79                 {
 80                     break;
 81                 }
 82             }
 83             return s == "" ? null : s;
 84         }
 85 
 86         private static Expression Exp0(char** input)
 87         {
 88             if (Char(input, '('))
 89             {
 90                 Expression e = Exp3(input);
 91                 if (!Char(input, ')'))
 92                 {
 93                     throw new ArgumentException("Error encountered, at " + new string(*input));
 94                 }
 95                 return e;
 96             }
 97             else if (Char(input, '-'))
 98             {
 99                 return new NegExpression
100                 {
101                     Op = Exp0(input),
102                 };
103             }
104             else
105             {
106                 double number = Number(input);
107                 if (!double.IsNaN(number))
108                 {
109                     return new NumberExpression
110                     {
111                         Number = number,
112                     };
113                 }
114 
115                 string name = Name(input);
116                 if (name == null)
117                 {
118                     throw new ArgumentException("Error encountered, at " + new string(*input));
119                 }
120 
121                 if (!Char(input, '('))
122                 {
123                     return new VariableExpression
124                     {
125                         Name = name,
126                     };
127                 }
128 
129                 FunctionExpression f = FunctionExpression.FromName(name);
130                 f.Op = Exp3(input);
131                 if (!Char(input, ')'))
132                 {
133                     throw new ArgumentException("Error encountered, at " + new string(*input));
134                 }
135                 return f;
136             }
137         }
138 
139         private static Expression Exp1(char** input)
140         {
141             Expression e = Exp0(input);
142             while (true)
143             {
144                 if (Char(input, '^'))
145                 {
146                     e = new PowerExpression
147                     {
148                         Left = e,
149                         Right = Exp0(input),
150                     };
151                 }
152                 else
153                 {
154                     break;
155                 }
156             }
157             return e;
158         }
159 
160         private static Expression Exp2(char** input)
161         {
162             Expression e = Exp1(input);
163             while (true)
164             {
165                 if (Char(input, '*'))
166                 {
167                     e = new MulExpression
168                     {
169                         Left = e,
170                         Right = Exp1(input),
171                     };
172                 }
173                 else if (Char(input, '/'))
174                 {
175                     e = new DivExpression
176                     {
177                         Left = e,
178                         Right = Exp1(input),
179                     };
180                 }
181                 else
182                 {
183                     break;
184                 }
185             }
186             return e;
187         }
188 
189         private static Expression Exp3(char** input)
190         {
191             Expression e = Exp2(input);
192             while (true)
193             {
194                 if (Char(input, '+'))
195                 {
196                     e = new AddExpression
197                     {
198                         Left = e,
199                         Right = Exp2(input),
200                     };
201                 }
202                 else if (Char(input, '-'))
203                 {
204                     e = new SubExpression
205                     {
206                         Left = e,
207                         Right = Exp2(input),
208                     };
209                 }
210                 else
211                 {
212                     break;
213                 }
214             }
215             return e;
216         }
217 
218         private static Expression UnsafeParse(char* input)
219         {
220             Expression result = Exp3(&input);
221             if ((int)*input == 0)
222             {
223                 return result;
224             }
225             else
226             {
227                 throw new ArgumentException("Expression contains unparsed tail, at " + new string(input));
228             }
229         }
230 
231         public static Expression Parse(string s)
232         {
233             fixed (char* input = s.Trim())
234             {
235                 return UnsafeParse(input);
236             }
237         }
238     }
239 }
240 



    下面是運(yùn)行結(jié)果:
  1 input:          1
  2 parse:          1
  3 reparse:        1
  4 simplified:     1
  5 contains x:     False
  6 contains y:     False
  7 dx:             0
  8 dy:             0
  9 simplified dx:  0
 10 simplified dy:  0
 11 
 12 input:          1.2
 13 parse:          1.2
 14 reparse:        1.2
 15 simplified:     1.2
 16 contains x:     False
 17 contains y:     False
 18 dx:             0
 19 dy:             0
 20 simplified dx:  0
 21 simplified dy:  0
 22 
 23 input:          -3
 24 parse:          -3
 25 reparse:        -3
 26 simplified:     -3
 27 contains x:     False
 28 contains y:     False
 29 dx:             -0
 30 dy:             -0
 31 simplified dx:  0
 32 simplified dy:  0
 33 
 34 input:          12+34
 35 parse:          (12 + 34)
 36 reparse:        (12 + 34)
 37 simplified:     46
 38 contains x:     False
 39 contains y:     False
 40 dx:             (0 + 0)
 41 dy:             (0 + 0)
 42 simplified dx:  0
 43 simplified dy:  0
 44 
 45 input:          56*78
 46 parse:          (56 * 78)
 47 reparse:        (56 * 78)
 48 simplified:     4368
 49 contains x:     False
 50 contains y:     False
 51 dx:             ((0 * 78+ (56 * 0))
 52 dy:             ((0 * 78+ (56 * 0))
 53 simplified dx:  0
 54 simplified dy:  0
 55 
 56 input:          x^y
 57 parse:          (x ^ y)
 58 reparse:        (x ^ y)
 59 simplified:     (x ^ y)
 60 contains x:     True
 61 contains y:     True
 62 dx:             (y * (x ^ (y - 1)))
 63 dy:             ((x ^ y) * ln(x))
 64 simplified dx:  (y * (x ^ (y - 1)))
 65 simplified dy:  ((x ^ y) * ln(x))
 66 
 67 input:          x+2*y+4
 68 parse:          ((x + (2 * y)) + 4)
 69 reparse:        ((x + (2 * y)) + 4)
 70 simplified:     ((x + (2 * y)) + 4)
 71 contains x:     True
 72 contains y:     True
 73 dx:             ((1 + ((0 * y) + (2 * 0))) + 0)
 74 dy:             ((0 + ((0 * y) + (2 * 1))) + 0)
 75 simplified dx:  1
 76 simplified dy:  2
 77 
 78 input:          (x+y)*(3+4)
 79 parse:          ((x + y) * (3 + 4))
 80 reparse:        ((x + y) * (3 + 4))
 81 simplified:     ((x + y) * 7)
 82 contains x:     True
 83 contains y:     True
 84 dx:             (((1 + 0* (3 + 4)) + ((x + y) * (0 + 0)))
 85 dy:             (((0 + 1* (3 + 4)) + ((x + y) * (0 + 0)))
 86 simplified dx:  7
 87 simplified dy:  7
 88 
 89 input:          exp(x+y)
 90 parse:          exp((x + y))
 91 reparse:        exp((x + y))
 92 simplified:     exp((x + y))
 93 contains x:     True
 94 contains y:     True
 95 dx:             (exp((x + y)) * (1 + 0))
 96 dy:             (exp((x + y)) * (0 + 1))
 97 simplified dx:  exp((x + y))
 98 simplified dy:  exp((x + y))
 99 
100 input:          x+ln(y)
101 parse:          (x + ln(y))
102 reparse:        (x + ln(y))
103 simplified:     (x + ln(y))
104 contains x:     True
105 contains y:     True
106 dx:             (1 + (0 / y))
107 dy:             (0 + (1 / y))
108 simplified dx:  1
109 simplified dy:  (1 / y)
110 
111 input:          x/y
112 parse:          (x / y)
113 reparse:        (x / y)
114 simplified:     (x / y)
115 contains x:     True
116 contains y:     True
117 dx:             (((1 * y) - (x * 0)) / (y ^ 2))
118 dy:             (((0 * y) - (x * 1)) / (y ^ 2))
119 simplified dx:  (y / (y ^ 2))
120 simplified dy:  (-/ (y ^ 2))
121 
122 input:          exp(x)/ln(x)
123 parse:          (exp(x) / ln(x))
124 reparse:        (exp(x) / ln(x))
125 simplified:     (exp(x) / ln(x))
126 contains x:     True
127 contains y:     False
128 dx:             ((((exp(x) * 1* ln(x)) - (exp(x) * (1 / x))) / (ln(x) ^ 2))
129 dy:             ((((exp(x) * 0* ln(x)) - (exp(x) * (0 / x))) / (ln(x) ^ 2))
130 simplified dx:  (((exp(x) * ln(x)) - (exp(x) * (1 / x))) / (ln(x) ^ 2))
131 simplified dy:  0
132 
133 請(qǐng)按任意鍵繼續(xù). . .

    最后一個(gè)simplified dy化簡(jiǎn)得真徹底啊……
posted on 2011-08-10 10:40 陳梓瀚(vczh) 閱讀(4749) 評(píng)論(9)  編輯 收藏 引用 所屬分類: .NET

評(píng)論:
# re: 函數(shù)繪圖(一)[未登錄](méi) 2011-08-10 17:02 | joe
在這里要先轉(zhuǎn)換到樓主語(yǔ)言才能閱讀,不然會(huì)直接懷疑自己所學(xué)的語(yǔ)言  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一)[未登錄](méi) 2011-08-10 17:18 | 空明流轉(zhuǎn)
膜拜樓主!  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一) 2011-08-10 18:33 | Pear
# re: 函數(shù)繪圖(一)[未登錄](méi) 2011-08-10 23:47 | diryboy
這些公式拆開(kāi)一個(gè)一個(gè)并起來(lái)才對(duì),寫到一個(gè)公式里的話,由于定義域的問(wèn)題,即使能作出來(lái)也只能是一部分。  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一) 2011-08-11 01:23 | 陳梓瀚(vczh)
@diryboy
求并==乘法  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一) 2011-08-12 02:20 | DiryBoy
@陳梓瀚(vczh)
例如 (1/x-1)*(1/(x-1)+1)=0 這條等式,如果你認(rèn)為x可以等于0或1那我也沒(méi)話說(shuō)。  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一) 2011-08-12 09:34 | 陳梓瀚(vczh)
@DiryBoy
這個(gè)嘛,顯然不能在沒(méi)有定義的點(diǎn)上做乘法,不需明說(shuō)。  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一)[未登錄](méi) 2011-08-13 21:05 | diryboy
@陳梓瀚(vczh)
所以 求并!=乘法  回復(fù)  更多評(píng)論
  
# re: 函數(shù)繪圖(一) 2011-08-26 02:30 | Junfeng
string而已,沒(méi)必要用指針  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品久久嫩草网站秘色 | 麻豆成人精品| 亚洲欧美一区二区精品久久久| 亚洲精品自在在线观看| 在线视频欧美一区| 亚洲欧美另类在线观看| 久久国产夜色精品鲁鲁99| 久久午夜精品一区二区| 欧美二区在线播放| 国产精品国码视频| 国产一区二区三区免费在线观看| 精品av久久707| 香港久久久电影| 亚洲片在线资源| 老司机67194精品线观看| 亚洲精品久久久久久下一站| 久久免费少妇高潮久久精品99| 久久全球大尺度高清视频| 亚洲国产激情| 欧美性片在线观看| 国户精品久久久久久久久久久不卡| 韩国av一区二区三区在线观看| 91久久精品国产91性色| 亚洲在线一区二区| 老司机精品视频网站| 99国产成+人+综合+亚洲欧美| 欧美一区二区日韩一区二区| 蜜桃av综合| 国产日韩欧美夫妻视频在线观看| 亚洲激情婷婷| 欧美影院在线| 亚洲人午夜精品免费| 欧美一级淫片播放口| 欧美绝品在线观看成人午夜影视| 国产一区二区三区最好精华液| 在线午夜精品自拍| 欧美激情视频一区二区三区免费| 性欧美大战久久久久久久久| 欧美日韩综合视频| 亚洲日本免费电影| 欧美aⅴ99久久黑人专区| 午夜伦欧美伦电影理论片| 欧美涩涩视频| 亚洲精品影院在线观看| 模特精品裸拍一区| 欧美中文字幕不卡| 国产精品永久免费视频| 亚洲性线免费观看视频成熟| 亚洲国产精品激情在线观看| 久久久精品国产99久久精品芒果| 国产精品综合| 午夜日韩激情| 一本一本久久| 欧美视频日韩视频| 正在播放欧美视频| 日韩手机在线导航| 欧美日韩国产天堂| 亚洲乱码精品一二三四区日韩在线| 美国成人直播| 久久久精品网| 亚洲福利在线观看| 亚洲高清在线播放| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美日产国产成人免费图片| 亚洲日本免费| 日韩亚洲视频| 国产精品卡一卡二| 午夜精品短视频| 久久久国产午夜精品| 欧美高清视频www夜色资源网| 欧美一区二区久久久| 国产亚洲一本大道中文在线| 久久精品二区| 久久午夜色播影院免费高清| 亚洲激情视频网| 99re6热只有精品免费观看| 国产精品大片wwwwww| 午夜精品久久久久久久久| 午夜精品福利视频| 影音先锋亚洲视频| 亚洲黄色小视频| 欧美日韩一视频区二区| 欧美在线免费播放| 久久午夜av| 亚洲一区二区三区色| 欧美在线亚洲一区| 亚洲精品网站在线播放gif| 一区二区三区视频在线| 国产一区二区久久精品| 亚洲国产美女| 欧美精选午夜久久久乱码6080| 一道本一区二区| 性做久久久久久| 亚洲区中文字幕| 亚洲一区久久久| 亚洲福利视频网站| 中文精品一区二区三区| 国产自产精品| 亚洲人被黑人高潮完整版| 国产九九视频一区二区三区| 欧美成人高清视频| 国产农村妇女毛片精品久久莱园子 | 亚洲三级网站| 午夜精品av| 99re66热这里只有精品3直播 | 亚洲午夜精品久久久久久浪潮| 欧美体内she精视频在线观看| 欧美自拍偷拍午夜视频| 亚洲字幕一区二区| 国产一区二区中文| 国产综合欧美在线看| 国产欧美日本一区二区三区| 久久久国产精品一区二区三区| 亚洲一区在线播放| 亚洲午夜在线视频| 99re国产精品| 一二三区精品福利视频| 亚洲精品综合久久中文字幕| 日韩一级精品视频在线观看| 亚洲一区精品视频| 日韩五码在线| 中国女人久久久| 久久久水蜜桃av免费网站| 久久在线免费观看| 亚洲欧洲综合另类在线| 激情成人中文字幕| 亚洲九九精品| 久久精品视频免费观看| 欧美一区二区黄| 欧美精品久久久久a| 蘑菇福利视频一区播放| 国产视频自拍一区| 亚洲欧美欧美一区二区三区| 亚洲一区在线播放| 欧美日韩一区二区免费视频| 亚洲精品国产精品国自产观看| 亚洲国产欧美一区二区三区久久 | 国产欧美日韩精品丝袜高跟鞋 | 欧美在线free| 国产精品素人视频| 在线一区免费观看| 亚洲在线中文字幕| 国产精品久久久久久亚洲调教| 一区二区三区国产精品| 在线视频日韩| 国产精品亚洲片夜色在线| 亚洲欧美激情四射在线日 | 欧美黄色aa电影| 亚洲欧洲精品成人久久奇米网| 亚洲视频在线看| 欧美激情在线有限公司| 欧美日韩伊人| 一区二区精品在线| 新67194成人永久网站| 国产精品私拍pans大尺度在线 | 国产一区二区精品久久| 欧美在线视频免费播放| 麻豆国产va免费精品高清在线| 在线观看欧美视频| 欧美激情bt| 亚洲在线电影| 久久一区二区三区国产精品| 亚洲人成在线观看| 国产精品jvid在线观看蜜臀 | 国产精品久久999| 久久精品视频免费| 亚洲精品社区| 亚洲无线观看| 夜夜嗨av色综合久久久综合网 | 免费精品视频| 一区二区三区 在线观看视频 | 久久久久国色av免费看影院| 亚洲国产一区二区三区青草影视| 欧美日本成人| 欧美一区二区三区的| 亚洲高清自拍| 久久成人久久爱| 9国产精品视频| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 日韩午夜精品视频| 国产日韩欧美中文在线播放| 欧美电影免费观看高清完整版| 亚洲一区影音先锋| 亚洲激情电影中文字幕| 亚洲欧美一区二区在线观看| 亚洲国产精品毛片| 国产欧美1区2区3区| 欧美激情免费在线| 久久久另类综合| 亚洲欧美日韩国产综合在线| 91久久综合| 免费成人小视频| 久久精品国产精品| 亚洲午夜久久久久久尤物| 亚洲国产日韩欧美| 国产综合网站| 国产欧美精品一区二区三区介绍 | 美女尤物久久精品| 久久精品视频在线观看| 亚洲欧美bt|