Thursday, October 31, 2019

Advertising on super bowl, internet Assignment Example | Topics and Well Written Essays - 250 words

Advertising on super bowl, internet - Assignment Example Secondly, Social Medias such as facebook is very popular. This has created an avenue to meet and communicate with all sorts of people in the entire world. Many companies have been advertisings on national television but with the entry of internet this has started to change. Small business should not spend most of its advertising budget on a television advertisement during the super bowl. Social media is also as major way that small business can use to reach large number of consumers especially the young consumers. Even if televisions are vital in informing families on the existence of new brands, it is not a competitive strategy. This is based on the fact that most companies have now embarked on use of internet to advertise their brands. As online shopping becomes popular there are still great fears among users. Most clients being used to the physical buying of goods and services, they tend to doubt the authenticity of the goods being sold online. Others fear payment transaction online as there is lot of cyber crime all over the world. Though there are lot of genuine goods and services being done on the internet which is much easier, cheaper and more so it can be done beyond

Tuesday, October 29, 2019

Customer Relationship Management and its implication to the Essay

Customer Relationship Management and its implication to the Information Flow and Business Strategy - Essay Example The author of the essay "Customer Relationship Management and its implication to the Information Flow and Business Strategy" comes to the interesting conclusions. The author of this research paper assumes that any successful business today operates in a very competitive and complex environment. The competition is increasing day by day the margins are shrinking. Several environmental factors are affecting the profit margins of the companies. These factors are related to each other and at the same time it is also influencing the internal factors of the organization. Organizations need to fulfill the expectations of all its stake holders. There is always a need to understand the complex environment and consumer behavior on continuous basis so that the market is served properly with right solution, at right time with good profit margins. Customer relationship Management now has become key to any successful organization is a vast and complex area of studies. This helps the organizations to serve their customers effectively, efficiently and profitable, get competitive leverage on the database, standardize the all the customer touch points in the organization, smoothen the marketing and sales activities. The projects which have strategically proven positive investments are those which are successful in socio-technical dimensions. The author also discusses such topics as business intelligence, knowledge management, and effective and efficient business intelligence systems.

Sunday, October 27, 2019

Comparison of Herny V Adaptations

Comparison of Herny V Adaptations Compare two different adaptations of the same primary text. In this brief essay, I will look at the comparative versions of Henry V, the first of which was the film produced during the Second World War in 1944 as a Laurence Olivier vehicle, given its full title The Chronicle History of King Henry the Fift with His Battell Fought in Agincourt in France, the second of which was Kenneth Branaghs Henry V, produced over four decades later in 1989. Firstly, the purpose behind the two films were very different. One of the arguments for the production of Shakespeares war plays was that they were written in order to enlist people into the British army. Thus, during the Second World War, the play itself was resurrected (with the recommendation of Winston Churchill himself), and became more polemicised still under the guidance of Olivier. Oliviers production begins in an Elizabethan theatre, which serves to steep the play in the history of its time. Rather than trying to enlist people into the army, the purpose of the play had changed into simply providing rousing propaganda for the masses. It could be argued that Oliviers choice to switch settings from a film set in an actual location to the authenticity of a theatrical setting steeps the film in a personal (and British) history that serves the nationalistic agenda of the film well. Branaghs film, on the other hand, chooses not to stray into the realms of the play within a play for mat, and instead provides escapist entertainment whose only agenda is to provide an authentic and encapsulating filmic rendition of the play itself. Central to the original version of Henry V is the speech where Henry psyches his army up to go into battle. In the two adaptations, it is striking how differently the play is directed. Olivier chooses simply to speak. The camera is stationary and there is no additional elements to the speech. The words are uttered in a much more florid way, perhaps emulating the stoical and noble speeches of Churchill at the time, who gave the impression of strong leadership and control at all times. On the other hand, Branaghs speech is delivered in a much more passionate way. Branagh bellows the lines, and during the speech the camera is in constant movement, suggesting a leader much closer to the actual action of the battle and of the brutalities of the war. Also, in Oliviers speech, the soundtrack remains conspicuously absent, which, on the one hand highlights the importancy of the words being spoken, but on the other hand, doesnt add any additional dramatic impact to the scene. Branaghs speech, in almost direct opposition to the production by Olivier, sets the speech to a rousing orchestral soundtrack, and as the speech develops, almost to echo the motivating and rousing impact of the speech, brass elements are added to the orchestra. The result is that Branagh makes the speech more immediately accessible, perhaps at the expense of Shakespeares language itself. Thus, what the second adaptation of the play gains in its portrayal of the dirtiness and of the visceral impact of war, it perhaps loses in relegating the simple, theatrical delivery of the lines to second place over a more expressionist style of cinematography. Olivier himself suggested during an interview after the film that When you are young, you are too bashful to play a hero; you debunk it. He starred in the play when he was 37, whereas Branagh himself was just 29 when he starred and directed his own version of the play. It is ironic that, although the first film was designed primarily as a propaganda film designed to stir up nationalistic sentiment, the second version of the play, because of the slightly less subtle vocal delivery by Branagh, and because of the cinematic devices used in the adaptation, is in fact much more effective as a pro-war and pro-patriotic propaganda film. But this arguably, was not the purpose of the first film. Certainly, the way in which both actors play Henry V differ greatly insofar as Oliviers performance is one that is much softer as in, the words and the vocal delivery isnt so much shouted, but portrayed instead in a much more distant, Churchillian way, which is arguably, a much more effective portraya l of the leader of Britain as it was intended to be portrayed during the Second World War. In terms of how effective the two films were in synthesising the elements of Shakespeares original war play, and using them to portray two very different aspects of leadership and of how a great war leader portrays himself, both films, albeit in very different ways, offer equally effective renditions of this central element of the play. Shakespeare himself intended the play to be used as propaganda to enlist people into the army, and the rousing speech about the nobility of war proves central to both film adaptations of the play. In the first, Oliviers rendition of the words are done in a more minimalist way. Henrys motivational speech is enunciated without any additional cinematographic devices, which highlights the delivery of the language and the subtleties of the words, rather than attacking the feeling the speech intended to rouse by using expressionist devices such as non-diagetic music and camera movement. Indeed, the Olivier produced piece is stark in the way it re-enacts the war scenes, as dialogue is very infrequently used in conjunction with dialogue. Conversely, Branagh uses a massive orchestral score during his rendition of the motivational speech, and the effect of portraying both the brutality and the nobility of great leadership in war is very different. Both films are effective in their own ways the Branagh directed piece, although it lacked the subtlety of personal performance and the vocalisation of Shakespeares lines that Oliviers had, also provided audiences with a Hollywood spectacle less encumbered by the sanctity of Shakespearean language, and more interested in providing a slice of historical entertainment, which, arguably, would have been Shakespeares original intention.

Friday, October 25, 2019

More Respect for Life and Fewer Cluster Bombs :: September 11 Terrorism Essays

More Respect for Life and Fewer Cluster Bombs    Many people's reactions to the atrocities of September 11 have gone from disbelief, to sadness, to anger, quiet or otherwise. We commonly hear that we have received a declaration of war, and should respond accordingly. This essay outlines my arguments for restraint.    The moral case. Morality should be universal. If attacking hostile governments by killing civilians is "evil" and "the very worst of human nature," then it is no better for the U.S. to do so than for Afghanistan to.    The terrorists who attacked the U.S. last week haven't spoken up, but probably would describe U.S. foreign policy with "evil," "cowardly," "despicable," and other words that Bush used. They believe that political ends and avenging wrongs from a foreign military justifies killing enemy civilians, even if their support for the government was only indirect. Analogously, Bush's speech stated that: "We will make no distinction between the terrorists who committed these acts and those who harbor them." Calls for a spectacularly bloody retaliatory strike aimed loosely towards the billion Muslims in the world are increasing, while dissent has been muted. Mountains of historical evidence document America's tolerance for heavy "collateral" damage when attacking the infrastructure of a demonized enemy, such as Saddam or Milosevic.    Tuesday's tragedy demonstrated America's surprising physical vulnerability, but, perhaps more disturbing, our response threatens to show a moral weakness that will be much harder to justify in hindsight.    The practical case. In Israel, extremists on both sides use terrorism and "random" violence for ends which are neither desperate nor irrational -- they aim to derail peace efforts and provoke a violent response on the other side that will cause moderates to reject compromise and side with extremists. "Jew" or "Arab" loses meaning in the face of the deeper struggle between hatred and tolerance, though typically only events such as Yitzhak Rabin's assassination by an extremist Israeli shock people into remembering. These oft-forgotten and crucial lessons from terror sound like Sunday school truisms: "the aim of violence is to beget further violence" and "blood cannot be washed away with blood."    These principles must sound a little other-worldly after Tuesday's atrocities, but there is no other time when it is more important that we remember them. Pausing to note that we can prove very little about the motivations of

Thursday, October 24, 2019

Marketing Principles Essay

1.1 Explain the various elements of the marketing process. Marketing is the activity, set of institutions, and processes for creating, communicating, delivering and exchanging offers that have value for customer, clients, partners and society at large. (Williams, 2013) Marketing Process: Situation analysis focuses more on the possible opportunities that will satisfy a customer’s need. This depends on how the product can influence the a specific environment and how the product can control you a specific group you want to target. It is being familiar with the SWOT forces. Marketing strategies is a process that specifies the information of the market to obtain its effectiveness.   Segmentation involves dividing the market into groups, where individuals have similar needs and wants for services and products. It could also be a segmentation of people on the basis of behavior, culture and economic status. (Rajeev, 2012) Targeting also known as the target market is the potential consumers of a product/service. Targeting helps tap the subset of the customer population most likely to purchase and use the product to effectively achieve maximum sales and profits. (Johnson, 2012) Positioning is how you want to be perceived in the minds of prospects versus your competition. It is also creating a positive image in the minds of the target market. Value Proposition pertains on how you want your consumers distinguish you from your competitors and make it obvious you are the best available choice. This marketing strategy summarizes what makes your product/service unique as it relates to addressing specific customer decision making criteria. It must be all about what’s important to them – your prospects. (Core Marketing Strategies, 2013) Market mix decision is a general phrase used to describe the different kinds of choices organizations have to make in the whole process of bringing a product or service to market. The 4 Ps is the best known way of defining marketing mix: (P.1) Product refers to any services or conveniences that are part of the offering. (P.2) Pricing should take into account profit margins and the probable pricing response of competitors. (P-3) Place is associated with channels of distribution that serve as the means for getting the product to the target consumers. (P-4) Promotions are those related to communicating and selling to the potential consumers. This includes advertising, public relations, media types, etc. (Internet Center for Management and Business Administration, Inc., 1999-2010) 1.2 Evaluate the benefits and costs of marketing orientation for a selected organization. Jollibee is our chosen food organization. It is the largest fast food chain in the Philippines, operating a nationwide network of over 750 stores. It is a dominant market leader in the Philippines. It is a family oriented work environment, the brand’s values also reflect on their advertising and marketing. Jollibee knows their target audience very well: the traditional family and all communication materials focus on the importance of family values. Jollibee is so well-loved every time a new store opens, especially overseas. It is a stronghold of heritage and monument of Filipino pride. (Jollibee Foods Corporation, 2013) The primary target market of Jollibee are Filipino kids ages 3-10y/o, teens ranging 11-21y/o can either be male or female; Filipino families even the senior citizen. Social classes C, D and E; and those looking for budget-friendly quick meals. In comparison from Maslow’s hierarchy of needs, eating in a fast-food chain w/o asking for money makes an individual happy, falls under self-actualization needs. Eating in Jollibee with family and friends makes people feel loved and accepted. That is a social need or feeling the sense of belongingness and love. Lastly, the need to satisfy ones hunger and in order to survive, it is the physiological need on an individual. The target market prefers Jollibee because the food are unique and has an appealing taste, foods can be easily served, foods are affordable, there a lots of variants the people can choose from, the mileau is very homey, the customer service is very family-oriented, and families, friends and colleagues can enjoy this together. Being the pioneer in fast-food industry, Jollibee had the majority in the marketing opportunity. Jollibee was able to capture 65% of the market share in hamburger market in the Philippines. The JFC reported 82 billion pesos by the end of 2011. Based on the annual report of JFC, Jollibee earned 50 billion pesos revenue on 2011. (Esberto, 2012) The product offered by Jollibee appeals to the Filipinos taste for spicy burgers. By concentrating its resources on satisfying the Filipino palate, Jollibee has been able to serve localized dishes that are unlikely found in other fast-food chains in the Philippines. In addition to that, offering the usual French fries that accompany the meals found in McDonald’s, KFC, Burger King and so forth. Jollibee also serves rice or spaghetti, Filipino style Even the burgers are cooked exactly as Filipinos want them done- sweeter and with more seasonings, often likened to what a Filipino mother would cook at home. It even incorporated recipes from employees to truly capture local tastes. The company’s phenomenal growth owes much to its strict and committed adherence to high standards as symbolized by â€Å"F.S.C†: Food (F) served to the public must meet the company’s excellence standards or it will not be served at all; the Service (S) must be fast and courteous; and Cleanliness  ©, from kitchen to utensils, must always be maintained. As for pricing, it is closely related to customer satisfaction. Thus, JFC provides its high quality fast-food products at a relatively cheaper price. According to its commitment to serve each and every Filipino, Jollibee keeps things affordable at all. The â€Å"DLSU SSURVEY† shows that, 94% of Jollibee’s customers think it’s affordable or cheaper. Figure [ 1 ]: Benefit Positioning vs. Brand Matrix The location of outlet is of key importance to the marketing strategy of Jollibee. It has established a large number of outlets to state that they care about the accessibility of fast-food outlet and 72% is satisfied that Jollibee maintained it very well. Overseas, the outlet in Hong Kong is located at Central where a large number of Filipinos gather. It is an example of Jollibee’s good placing strategy. Recently, to capture more share from their customer’s wallet, Jollibee introduced home service. Loyal customers, for some reason who can’t get out of home but want to have a bite of Jollibee, can now avail their products via phone call. They also provide drive-thru’s for their customers who are in a rush and can’t get out of their car and line-up. Jollibee management carefully selects their franchisors to make sure they can meet its standard. To be a franchisee of Jollibee, one has to invest 15-30 million pesos. Brands in local market are strong contenders and not to be underestimated. Jollibee often have the advantage of intimate knowledge of consumer tastes and consumer preference through local pride. Jollibee used the wave of nationalist pride to promote a Filipino brand of hamburger. This strategy met with great success. Investing in socio-civic programs designed to serve its host communities further secured Jollibee’s position as a Filipino company for the Filipinos. Advocacy campaigns such as the early Christmas drive â€Å"ma-Aga ang pasko sa Jollibee†, again endorsed by Aga Muhlach, the poverty housing project with habitat. For humanity, the â€Å"Kaya Mo Yan Kid Campaign†, it encourages kids to show their potentials that will contribute to the company’s overall success, not only with its customers but with all its stakeholders. Family is a key component for Jollibee’s promotion. They just simply don’t want to cater food and service but they wanted to be a part of every Filipino family. Its quality customer service of being family-oriented is one key to their success. While McDonald’s promotion focuses on the empowerment of young adults to enjoy life by means of eating their products. Jollibee’s rapid growth is due to its superior menu line-up, creative marketing programs, and efficient manufacturing and logistics facilities. It is made possible by well-trained teams that work in a culture of integrity and humility, fun and family-like environment. As a corporate citizen, Jollibee is also committed to give back to its host communities through meaningful and lasting socio-civic projects. (Sakib, 2011) Jollibee was able to attain a competitive advantage in the Philippines over McDonald’s by doing following things: Jollibee was the first to enter the market. It was able to retain tight control over operations management, which allowed it to price below its competitor. And, it had the flexibility to cater to the tastes of its local consumers. From the very beginning Jollibee Foods Corporation had focused on delivering quality food and service at an affordable cost to the customers. This had been possible only due to excellent operational control. Jollibee enjoyed a dominant position in the fast food market in Philippines until McDonalds entered the market. They focused on their main asset, their knowledge of taste and preferences of the local population. [ (Andrew, 2011) ] 2.1 Show macro and micro environmental factors which influence marketing decisions. The marketing environment consists of all the actors and forces outside marketing that affect the marketing management’s ability to develop and maintain successful relationships with its target customers. Though these factors and forces may vary depending on the specific company and industrial group, they can generally be divided into broad micro environmental and macro environmental components. Micro environmental components are: Company-top management is responsible for setting the company’s mission, objectives, broad strategies, and policies. Marketing managers must make decisions within the parameters established by top management. Marketing managers must also work closely with other company departments. Areas such as finance, R & D, purchasing, manufacturing, and accounting all produce better results when aligned by common objectives and goals. All departments must â€Å"think consumer† if the firm is to be successful. The goal is to provide superior customer value and satisfaction. Suppliers-are firms and individuals that provide the resources needed by the company and its competitors to produce goods and services. They are an important link in the company’s overall customer â€Å"value delivery system.† Marketing channel firms (intermediaries)-firms that help the company to promote, sell, and distribute its goods to final buyer. Customer markets-consumer markets, individuals and households that buy goods and services for personal consumption. Business markets, those who buy goods and services for further processing or for use in their production process. Reseller markets, those who buy goods and services in order to resell them at a profit. Government markets, agencies that buy goods and services in order to produce public services or transfer them to those that need them. International markets, buyers of all types in foreign countries Competitors-A company must secure a strategic advantage over competitors by positioning their offerings to be successful in the marketplace. No single competitive strategy is best for all company. Publics – Any group that has an actual or potential interest in or impact on an organization’s ability to achieve its objectives. A company should prepare a marketing plan for all of their major publics as well as their customer markets. Macro environmental components are thought to be: Demographic-the study of human populations in terms of size, density, location, age, sex, race occupation, and other statistics. It is of major interest to marketers because it involves people and people make up markets. Demographic trends are constantly changing Economic-those factors that affect consumer purchasing power and spending patterns. Natural-natural resources that are needed as inputs by marketers or that are affected by marketing activities Technological-forces that create new technologies, creating new product and market opportunities Political-laws, government agencies, and pressure groups that influence and limit various organizations and individuals in a given society. Various forms of legislation regulate business Cultural forces-institutions and other forces that affect society’s basic values, perceptions, preferences, and behaviors. Certain cultural characteristics can affect marketing decision-making The wise marketing manager knows that he or she cannot always affect environmental forces. However, smart managers can take a proactive, rather than reactive, approach to the marketing environment. (Kotler, 2012) 2.2 Propose segmentation criteria to be used for products in different markets. To ensure that the market segments that have been constructed by the firm, they must meet the basic requirements and guidelines, which will make them usable segments and potential target markets. (Market Segmentation Study Guide, 2012) An ideal market segment meets all of the following criteria: (1) It is possible to measure, (2) it must be large enough to earn profit, (3) it must be stable enough that it does not vanish after some time, (4) it is possible to reach potential customers via the organization’s promotion and distribution channel, (5) it is internally homogeneous (potential customers in the same segment prefer the same product qualities, (6) it is externally heterogeneous, that is, potential customers from different segments have different quality preferences, (7) it responds consistently to a given market stimulus, (8) it can be reached by market intervention in a cost-effective manner and (9) it is useful in deciding on the marketing mix. (Wikipedia, The Free Encyclopedia, 2013) 2.3 Choose a targeting strategy for a selected product or service. Kitchner had the goal of making Jollibee one of the world’s top ten fast food brands by the year 2000. In his plan to increase international expansion, he implemented two strategies, â€Å"targeting expats† and â€Å"planting the flag†. His plan of â€Å"targeting expats† allows the company transition into an unfamiliar market much easier because expatriate Filipinos working in other countries could relate to Jollibee’s. Though there is a huge risk of targeting a narrow segment, Jollibee’s local success allows for momentum to generate the expansion and growth of the company. However, Kitchner quickly found out that this market was limited and that not all the overseas Filipinos were potential customers. (Paul, 2011) On the other hand, Kitchner’s decision to â€Å"plant the flag† is to leverage Jollibee’s competitive advantage by entering new geographic market, his rapid expansion strategy was unfocused and poorly executed. He also neglected to consider the large transaction costs associated with establishing markets in new countries. Kitchner’s desire to be first-mover in a number of small, undeveloped markets would not have brought the prestige needed to win the firm better partners. â€Å"Planting the flag† only showed that Jollibee knew how to repeat its success. In order to compete on the level with multinationals, Jollibee would have to take its performance to the next step and prove that it could continue to build its competitive advantage. (Tran, 2005) 2.4 Demonstrate how buyer behavior affects marketing activities in different buying situations. Buying behavior is made up of the internal and external factors that explain why consumers buy and use certain products or services. This type of behavior can affect the marketing strategy that a business employs to promote its products, and when this behavior is analyzed, it can guide a business toward better marketing strategies and methods that it might not have originally used. Supply and Demand is one of the basic economic theories that drive marketing of which consists of a ratio between the amounts of supply versus the amount of demand for that supply. Two supply and demand situations can majorly affect the type of marketing you employ for your goods. These situations include when a product or service is in abundant supply and demand is scarce or when a product or service is scarce and there is increased demand for it. Routine buying behavior is the programmed response that consumers may have to certain types of products. Usually these products are not expensive, such as cars or computers, and can include anything that is commonly bought on a week-to-week basis. Complex Decision-Making is another type of buyer behavior which is usually associated with high-end, expensive or scarce products such as diamonds, fine wine or automobiles. This behavior often comes with high involvement on the consumer’s part in that he will generally want to thoroughly research the product and differences between brands before he makes a decision on which one to buy. Internal Factors that marketers need to be aware of can also affect a consumer’s buying process. These elements — personal, psychological and social — guide buying behaviors and consumption patterns and can be a valuable tool to creating better marketing strategies on the seller’s side. For example, a consumer may opt for a specific brand of cola because of provocative advertising that may make that consumer feel â€Å"sexy† for drinking it, versus buying another brand of cola that uses nonsexual advertising. Delivering the feeling you want experienced when a consumer uses your product is imperative to a good marketing mix of strategies. (Vogt, 1999-2013) 2.5 Positioning selected product/service. Ensuring high traffic needs an emphasis on store location and positioning Jollibee in the minds of the consumers as a place where they can enjoy eating fast food. This entails proper branding and positioning of the services/products offered. Jollibee Foods Corporation brought to everyone’s lips the promise of LANGHAP SARAP (smells so good so it must taste good) Jollibee also projected itself as a world-class brand by expanding its market overseas. Its nationalist view is a key fact. Personnel at Jollibee communicate with customers in local language rather than English unlike to its competitor such as McDonald’s. It provides more homely environment than competitors with tailored food menu to meet the local people’s needs. Jollibee is a super place for children that has ever been. Children can come with their parents and play here while being served with special items made for them. Also, Jollibee facilitates party arrangements for its consumers. Thus, the value proposition of Jollibee that distinguished it from its competitors is, â€Å"Jollibee provide special Philippines’ meal at a cheaper price in a very much homely environment and is a place where people come for joy†. (Sakib, 2011) Bibliography Andrew, 2011. Jollibee – Case Study Analysis | Research Paper. [Online] Available at: http://www.allfreepapers.com/print/Jollibee–Case-Study-Analysis/1794.html [Accessed 6 February 2013]. Anon., 2013. Wikipedia. [Online] Available at: http://en.wikipedia.org/wiki/Jollibee_Foods_Corporation [Accessed 2 February 2013]. Anon., 2013. Imperial College London. [Online] Available at: http://www3.imperial.ac.uk/capitalprojects/projectprocedures/processes/pm/1.40 [Accessed 2 February 2013]. Core Marketing Strategies, 2013. Business Marketing Plan. [Online] Available at: http://www.coremarketingstrategies.com/business-marketing-plan.html [Accessed January 2013]. Esberto, E. F., 2012. 10 Steps Marketing Plan of Jollibee Foods Corportation. [Online] Available at: http://www.slideshare.net/ElainroseEsberto/10-steps-marketing-plan-jollibee [Accessed 6 February 2013]. Internet Center for Management and Business Administration, Inc., 1999-2010. The Marketing Mix. [Online] Available at: http://www.quickmba.com/marketing/mix/ [Accessed January 2013]. Johnson, P., 2012. Buzzle. [Online] Available at: http://www.buzzle.com/articles/target-marketing-strategy.html [Accessed January 2013]. Jollibee Foods Corporation, 2013. About Us | Jollibee. [Online] Available at: http://www.jollibee.com.ph/about-us [Accessed 2 February 2013]. Jollibee Foods Corporation, 2013. About us | Jollibee Foods Corporation. [Online] Available at: http://www.jollibee.com.ph/about-us [Accessed 1 February 2013]. Kotler, P., 2012. Marketing Micro and Micro Environment. [Online] Available at: http://www.scribd.com/doc/22543929/Marketing-Micro-and-Macro-Environment [Accessed 6 February 2013]. Market Segmentation Study Guide, 2012. Criteria for Effective Segmentation. [Online] Available at: http://www.segmentationstudyguide.com/understanding-market-segmentation/crite ria-for-effective-market-segmentation/ [Accessed 6 February 2013]. Paul, 2011. Case Study: Jollibee Foods Corporation (A): International Expansion. [Online] Available at: http://allbestessays.com/Business/Case-Study-Jollibee-Foods-Corporation/11945.html [Accessed 6 February 2013]. Rajeev, L., 2012. Buzzle. [Online] Available at: http://www.buzzle.com/articles/market-segmentation-strategy.html [Accessed January 2013]. Sakib, N., 2011. Jollibee Foods Corporation. [Online] Available at: http://www.docstoc.com/docs/88862150/Jollibee-Foods-Corporation [Accessed 6 February 2013]. Sakib, N., 2011. Jollibee Foods Corporation. [Online] Available at: http://www.docstoc.com/docs/88862150/Jollibee-Foods-Corporation [Accessed 6 February 2013]. Tran, M. A., 2005. proJollibee. [Online] Available at: https://docs.google.com/viewer?a=v&q=cache:dJ58omTFofYJ:www.ocf.berkeley.edu/~matran/Files/proJollibee.doc+&hl=en&gl=ph&pid=bl&srcid=ADGEEShpGDHLcTB5xTtp6Jn_o7VQ9T3biGQO2otrRWvxB4rP8lNMSAh6IeiwzPsfhq83y3bV931_rOjRLigmb014tYUI-A8YGpkNcAMKFQMPbbNd9cbzqt3h6T [Accessed 6 February 2013]. Vogt, C., 1999-2013. How the Buyer’s Behavior Affects Marketing Activities. [Online] Available at: http://www.ehow.com/info_8749189_buyers-behavior-affects-marketing-activities.html [Accessed 7 February 2013]. Wikipedia, The Free Encyclopedia, 2013. Market Segmentation – Wikipedia, The Free Encyclopedia. [Online] Available at: http://en.wikipedia.org/wiki/Market_segmentation [Accessed 6 February 2013]. Williams, D. K. C., 2013. COLLEGE OF BUSINESS ADMINISTRATION. [Online] Available at: http://www.csustan.edu/market/williams/3410intr.htm [Accessed

Wednesday, October 23, 2019

Sage 50 Accounting Software Tutorial

Sage Tutorial Release 5. 3 The Sage Development Team September 10, 2012 CONTENTS 1 Introduction 1. 1 Installation 1. 2 Ways to Use Sage . . 1. 3 Longterm Goals for Sage . . 3 4 4 4 7 7 9 10 13 18 21 24 26 29 33 38 39 41 51 51 53 54 54 55 56 57 58 60 61 62 65 65 66 67 68 2 A Guided Tour 2. 1 Assignment, Equality, and Arithmetic 2. Getting Help . 2. 3 Functions, Indentation, and Counting 2. 4 Basic Algebra and Calculus . . 2. 5 Plotting . 2. 6 Some Common Issues with Functions 2. 7 Basic Rings . . 2. 8 Linear Algebra 2. 9 Polynomials . 2. 10 Parents, Conversion and Coercion . . 2. 11 Finite Groups, Abelian Groups . 2. 12 Number Theory . . 2. 13 Some More Advanced Mathematics 3 The Interactive Shell 3. 1 Your Sage Session . . 3. 2 Logging Input and Output . 3. 3 Paste Ignores Prompts 3. 4 Timing Commands . . 3. 5 Other IPython tricks . 3. 6 Errors and Exceptions 3. 7 Reverse Search and Tab Completion . . 3. 8 Integrated Help System . 3. 9 Saving and Loading Individual Objects 3. 10 Savi ng and Loading Complete Sessions 3. 11 The Notebook Interface . . 4 Interfaces 4. 1 GP/PARI 4. 2 GAP . . 4. 3 Singular . 4. 4 Maxima i 5 Sage, LaTeX and Friends 5. 1 Overview . . 5. 2 Basic Use . . 5. 3 Customizing LaTeX Generation . . 5. 4 Customizing LaTeX Processing . . 5. 5 An Example: Combinatorial Graphs with tkz-graph . 5. 6 A Fully Capable TeX Installation . 5. 7 External Programs . 71 71 72 73 75 76 77 77 79 79 80 81 81 82 84 85 86 86 88 91 93 93 94 95 97 97 99 101 103 105 6 Programming 6. 1 Loading and Attaching Sage ? les 6. 2 Creating Compiled Code . 6. 3 Standalone Python/Sage Scripts . 6. 4 Data Types 6. 5 Lists, Tuples, and Sequences 6. 6 Dictionaries 6. 7 Sets . 6. 8 Iterators . . 6. 9 Loops, Functions, Control Statements, and Comparisons 6. 10 Pro? ling . 7 Using SageTeX 8 . . Afterword 8. 1 Why Python? . . 8. I would like to contribute somehow. How can I? . 8. 3 How do I reference Sage? . 9 Appendix 9. 1 Arithmetical binary operator precedence . . 10 Bibliography 1 1 Indices and tables Bibliography Index ii Sage Tutorial, Release 5. 3 Sage is free, open-source math software that supports research and teaching in algebra, geometry, number theory, cryptography, numerical computation, and related areas. Both the Sage development model and the technology in Sage itself are distinguished by an extremely strong emphasis on openness, community, cooperation, and collaboration: we are building the car, not reinventing the wheel. The overall goal of Sage is to create a viable, free, open-source alternative to Maple, Mathematica, Magma, and MATLAB. This tutorial is the best way to become familiar with Sage in only a few hours. You can read it in HTML or PDF versions, or from the Sage notebook (click Help, then click Tutorial to interactively work through the tutorial from within Sage). This work is licensed under a Creative Commons Attribution-Share Alike 3. 0 License. CONTENTS 1 Sage Tutorial, Release 5. 3 2 CONTENTS CHAPTER ONE INTRODUCTION This tutorial should take at most 3-4 hours to fully work through. You can read it in HTML or PDF versions, or from the Sage notebook click Help, then click Tutorial to interactively work through the tutorial from within Sage. Though much of Sage is implemented using Python, no Python background is needed to read this tutorial. You will want to learn Python (a very fun language! ) at some point, and there are many excellent free resources for doing so including [PyT] and [Dive]. If you just want to quickly try out Sage, this tutorial is the place to start. For example: sage: 2 + 2 4 sage: factor(-2007) -1 * 3^2 * 223 sage: A = matrix(4,4, range(16)); A [ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] sage: factor(A. charpoly()) x^2 * (x^2 – 30*x – 80) sage: m = matrix(ZZ,2, range(4)) sage: m[0,0] = m[0,0] – 3 sage: m [-3 1] [ 2 3] sage: E = EllipticCurve([1,2,3,4,5]); sage: E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field sage: E. anlist(10) [0, 1, 1, 0, -1, -3, 0, -1, -3, -3, -3] sage: E. ank() 1 sage: k = 1/(sqrt(3)*I + 3/4 + sqrt(73)*5/9); k 1/(I*sqrt(3) + 5/9*sqrt(73) + 3/4) sage: N(k) 0. 165495678130644 – 0. 0521492082074256*I sage: N(k,30) # 30 â€Å"bits† 0. 16549568 – 0. 052149208*I sage: latex(k) frac{1}{i , sqrt{3} + frac{5}{9} , sqrt{73} + frac{3}{4}} 3 Sage Tutorial, Release 5. 3 1. 1 Installation If you do not have Sage installed on a computer and just want to try s ome commands, use online at http://www. sagenb. org. See the Sage Installation Guide in the documentation section of the main Sage webpage [SA] for instructions on installing Sage on your computer. Here we merely make a few comments. 1. The Sage download ? le comes with â€Å"batteries included†. In other words, although Sage uses Python, IPython, PARI, GAP, Singular, Maxima, NTL, GMP, and so on, you do not need to install them separately as they are included with the Sage distribution. However, to use certain Sage features, e. g. , Macaulay or KASH, you must install the relevant optional package or at least have the relevant programs installed on your computer already. Macaulay and KASH are Sage packages (for a list of available optional packages, type sage -optional, or browse the â€Å"Download† page on the Sage website). . The pre-compiled binary version of Sage (found on the Sage web site) may be easier and quicker to install than the source code version. Just unpack the ? le and run sage. 3. If you’d like to use the SageTeX package (which allows you to embed the results of Sage computations into a LaTeX ? le), you will need to make SageTeX known to yo ur TeX distribution. To do this, see the section â€Å"Make SageTeX known to TeX† in the Sage installation guide (this link should take you to a local copy of the installation guide). It’s quite easy; you just need to set an environment variable or copy a single ? e to a directory that TeX will search. The documentation for using SageTeX is located in $SAGE_ROOT/local/share/texmf/tex/generic/sagetex/, where â€Å"$SAGE_ROOT† refers to the directory where you installed Sage – for example, /opt/sage-4. 2. 1. 1. 2 Ways to Use Sage You can use Sage in several ways. †¢ Notebook graphical interface: see the section on the Notebook in the reference manual and The Notebook Interface below, †¢ Interactive command line: see The Interactive Shell, †¢ Programs: By writing interpreted and compiled programs in Sage (see Loading and Attaching Sage ? es and Creating Compiled Code), and †¢ Scripts: by writing stand-alone Python scripts that use the Sag e library (see Standalone Python/Sage Scripts). 1. 3 Longterm Goals for Sage †¢ Useful: Sage’s intended audience is mathematics students (from high school to graduate school), teachers, and research mathematicians. The aim is to provide software that can be used to explore and experiment with mathematical constructions in algebra, geometry, number theory, calculus, numerical computation, etc. Sage helps make it easier to interactively experiment with mathematical objects. Ef? cient: Be fast. Sage uses highly-optimized mature software like GMP, PARI, GAP, and NTL, and so is very fast at certain operations. †¢ Free and open source: The source code must be freely available and readable, so users can understand what the system is really doing and more easily extend it. Just as mathematicians gain a deeper understanding of a theorem by carefully reading or at least skimming the proof, people who do computations should be able to understand how the calculations work by re ading documented source code. If you use Sage to do computations 4 Chapter 1. Introduction Sage Tutorial, Release 5. 3 in a paper you publish, you can rest assured that your readers will always have free access to Sage and all its source code, and you are even allowed to archive and re-distribute the version of Sage you used. †¢ Easy to compile: Sage should be easy to compile from source for Linux, OS X and Windows users. This provides more ? exibility for users to modify the system. †¢ Cooperation: Provide robust interfaces to most other computer algebra systems, including PARI, GAP, Singular, Maxima, KASH, Magma, Maple, and Mathematica. Sage is meant to unify and extend existing math software. †¢ Well documented: Tutorial, programming guide, reference manual, and how-to, with numerous examples and discussion of background mathematics. †¢ Extensible: Be able to de? ne new data types or derive from built-in types, and use code written in a range of languages. †¢ User friendly: It should be easy to understand what functionality is provided for a given object and to view documentation and source code. Also attain a high level of user support. 1. 3. Longterm Goals for Sage 5 Sage Tutorial, Release 5. 3 6 Chapter 1. Introduction CHAPTER TWO A GUIDED TOUR This section is a guided tour of some of what is available in Sage. For many more examples, see â€Å"Sage Constructions†, which is intended to answer the general question â€Å"How do I construct ? †. See also the â€Å"Sage Reference Manual†, which has thousands more examples. Also note that you can interactively work through this tour in the Sage notebook by clicking the Help link. (If you are viewing the tutorial in the Sage notebook, press shift-enter to evaluate any input cell. You can even edit the input before pressing shift-enter. On some Macs you might have to press shift-return rather than shift-enter. ) 2. 1 Assignment, Equality, and Arithmetic With some minor exceptions, Sage uses the Python programming language, so most introductory books on Python will help you to learn Sage. Sage uses = for assignment. It uses ==, =, < and > for comparison: sage: sage: 5 sage: True sage: False sage: True sage: True a = 5 a 2 == 2 2 == 3 2 < 3 a == 5 Sage provides all of the basic mathematical operations: age: 8 sage: 8 sage: 1 sage: 5/2 sage: 2 sage: True 2**3 2^3 10 % 3 10/4 10//4 # for integer arguments, // returns the integer quotient # # # ** means exponent ^ is a synonym for ** (unlike in Python) for integer arguments, % means mod, i. e. , remainder 4 * (10 // 4) + 10 % 4 == 10 7 Sage Tutorial, Release 5. 3 sage: 3^2*4 + 2%5 38 The computation of an expression like 3^2*4 + 2%5 depends on the order in which the operations are applied; this is speci? ed in the â€Å"operator precedence table† in Arithmetical binary operator precedence. Sage also provides many familiar mathematical functions; here are just a few examples: sage: sqrt(3. ) 1. 84390889145858 sage: sin(5. 135) -0. 912021158525540 sage: sin(pi/3) 1/2*sqrt(3) As the last example shows, some mathematical expressions return ‘exact’ values, rather than numerical approximations. To get a numerical approximation, use either the function n or the method n (and both of these have a longer name, numerical_approx, and the function N is the same as n)). These take optional arguments prec, which is the requested number of bits of precision, and digits, which is the requested number of decimal digits of precision; the default is 53 bits of precision. sage: exp(2) e^2 sage: n(exp(2)) 7. 8905609893065 sage: sqrt(pi). numerical_approx() 1. 77245385090552 sage: sin(10). n(digits=5) -0. 54402 sage: N(sin(10),digits=10) -0. 5440211109 sage: numerical_approx(pi, prec=200) 3. 14 15926535897932384626433832795028841971693993751058209749 Python is dynamically typed, so the value referred to by each variable has a type associated with it, but a given variable may hold values of any Python type within a given scope: sage: sage: The C programming language, which is statically typed, is much different; a variable declared to hold an int can only hold an int in its scope. A potential source of confusion in Python is that an integer literal that begins with a zero is treated as an octal number, i. e. , a number in base 8. sage: 9 sage: 9 sage: sage: ’11’ 011 8 + 1 n = 011 n. str(8) # string representation of n in base 8 8 Chapter 2. A Guided Tour Sage Tutorial, Release 5. 3 This is consistent with the C programming language. 2. 2 Getting Help Sage has extensive built-in documentation, accessible by typing the name of a function or a constant (for example), followed by a question mark: sage: tan? Type: Definition: Docstring: tan( [noargspec] ) The tangent function EXAMPLES: sage: tan(pi) 0 sage: tan(3. 1415) -0. 0000926535900581913 sage: tan(3. 1415/4) 0. 999953674278156 sage: tan(pi/4) 1 sage: tan(1/2) tan(1/2) sage: RR(tan(1/2)) 0. 546302489843790 sage: log2? Type: Definition: log2( [noargspec] ) Docstring: The natural logarithm of the real number 2. EXAMPLES: sage: log2 log2 sage: float(log2) 0. 69314718055994529 sage: RR(log2) 0. 693147180559945 sage: R = RealField(200); R Real Field with 200 bits of precision sage: R(log2) 0. 9314718055994530941723212145817656807550013436025525412068 sage: l = (1-log2)/(1+log2); l (1 – log(2))/(log(2) + 1) sage: R(l) 0. 18123221829928249948761381864650311423330609774776013488056 sage: maxima(log2) log(2) sage: maxima(log2). float() . 6931471805599453 sage: gp(log2) 0. 6931471805599453094172321215 # 32-bit 0. 69314718055994530941723212145817656807 # 64-bit sage: sudoku? 2. 2. Getting Help 9 Sage Tutorial, Release 5. 3 File: Type: D efinition: Docstring: sage/local/lib/python2. 5/site-packages/sage/games/sudoku. py sudoku(A) Solve the 9Ãâ€"9 Sudoku puzzle defined by the matrix A. EXAMPLE: sage: A = matrix(ZZ,9,[5,0,0, 0,8,0, 0,4,9, 0,0,0, 5,0,0, 0,3,0, 0,6,7, 3,0,0, 0,0,1, 1,5,0, 0,0,0, 0,0,0, 0,0,0, 2,0,8, 0,0,0, 0,0,0, 0,0,0, 0,1,8, 7,0,0, 0,0,4, 1,5,0, 0,3,0, 0,0,2, 0,0,0, 4,9,0, 0,5,0, 0,0,3]) sage: A [5 0 0 0 8 0 0 4 9] [0 0 0 5 0 0 0 3 0] [0 6 7 3 0 0 0 0 1] [1 5 0 0 0 0 0 0 0] [0 0 0 2 0 8 0 0 0] [0 0 0 0 0 0 0 1 8] [7 0 0 0 0 4 1 5 0] [0 3 0 0 0 2 0 0 0] [4 9 0 0 5 0 0 0 3] sage: sudoku(A) [5 1 3 6 8 7 2 4 9] [8 4 9 5 2 1 6 3 7] [2 6 7 3 4 9 5 8 1] [1 5 8 4 6 3 9 7 2] [9 7 4 2 1 8 3 6 5] [3 2 6 7 9 5 4 1 8] [7 8 2 9 3 4 1 5 6] [6 3 5 1 7 2 8 9 4] [4 9 1 8 5 6 7 2 3] Sage also provides ‘Tab completion’: type the ? rst few letters of a function and then hit the tab key. For example, if you type ta followed by TAB, Sage will print tachyon, tan, tanh, taylor. This provides a good way to ? nd the names of functions and other structures in Sage. 2. 3 Functions, Indentation, and Counting To de? ne a new function in Sage, use the def command and a colon after the list of variable names. For example: sage: def is_even(n): return n%2 == 0 sage: is_even(2) True sage: is_even(3) False Note: Depending on which version of the tutorial you are viewing, you may see three dots n the second line of this example. Do not type them; they are just to emphasize that the code is indented. Whenever this is the case, press [Return/Enter] once at the end of the block to insert a blank line and conclude the function de? nition. You do not specify the types of any of the input arguments. You can specify multiple inputs, each of which may have an optional defaul t value. For example, the function below defaults to divisor=2 if divisor is not speci? ed. 10 Chapter 2. A Guided Tour Sage Tutorial, Release 5. 3 sage: sage: True sage: True sage: False ef is_divisible_by(number, divisor=2): return number%divisor == 0 is_divisible_by(6,2) is_divisible_by(6) is_divisible_by(6, 5) You can also explicitly specify one or either of the inputs when calling the function; if you specify the inputs explicitly, you can give them in any order: sage: is_divisible_by(6, divisor=5) False sage: is_divisible_by(divisor=2, number=6) True In Python, blocks of code are not indicated by curly braces or begin and end blocks as in many other languages. Instead, blocks of code are indicated by indentation, which must match up exactly. For example, the following is a syntax error because the return statement is not indented the same amount as the other lines above it. sage: def even(n): v = [] for i in range(3,n): if i % 2 == 0: v. append(i) return v Syntax Error: return v If you ? x the indentation, the function works: sage: def even(n): v = [] for i in range(3,n): if i % 2 == 0: v. append(i) return v sage: even(10) [4, 6, 8] Semicolons are not needed at the ends of lines; a line is in most cases ended by a newline. However, you can put multiple statements on one line, separated by semicolons: sage: a = 5; b = a + 3; c = b^2; c 64 If you would like a single line of code to span multiple lines, use a terminating backslash: sage: 2 + 3 5 In Sage, you count by iterating over a range of integers. For example, the ? rst line below is exactly like for(i=0; i x^2 sage: g(3) 9 sage: Dg = g. derivative(); Dg x |–> 2*x sage: Dg(3) 6 sage: type(g) sage: plot(g, 0, 2) Note that while g is a callable symbolic expression, g(x) is a related, but different sort of object, which can also be plotted, differentated, etc. , albeit with some issues: see item 5 below for an illustration. sage: x^2 sage: g(x). derivative() plot(g(x), 0, 2) 3. Use a pre-de? ed Sage ‘calculus function’. These can be plotted, and with a little help, differentiated, and integrated. sage: type(sin) sage: plot(sin, 0, 2) sage: type(sin(x)) sage: plot(sin(x), 0, 2) By itself, sin cannot be differentiated, at least not to produce cos. sage: f = sin sage: f. derivative() Traceback (most recent call last): AttributeError: Using f = sin(x) instead of sin works, but it is probably even better to use f(x) = sin(x) to de? ne a callable symbolic expression. sage: S(x) = sin(x) sage: S. derivative() x |–> cos(x) Here are some common problems, with explanations: 4. Accidental evaluation. sage: def h(x): f x 1 to 0. sage: G = DirichletGroup(12) sage: G. list() [Dirichlet character modulo 12 of conductor 1 mapping 7 |–> 1, 5 |–> 1, Dirichlet character modulo 12 of conductor 4 mapping 7 |–> -1, 5 |–> 1, Dirichlet character modulo 12 of conductor 3 mapping 7 |–> 1, 5 |–> -1, Dirichlet character modulo 12 of conductor 12 mapping 7 |–> -1, 5 |–> -1] sage: G. gens() (Dirichlet character modulo 12 of conductor 4 mapping 7 |–> -1, 5 |–> 1, Dirichlet character modulo 12 of conductor 3 mapping 7 |–> 1, 5 |–> -1) sage: len(G) 4 Having created the group, we next create an element and compute with it. age: G = DirichletGroup(21) sage: chi = G. 1; c hi Dirichlet character modulo 21 of conductor 7 mapping 8 |–> 1, 10 |–> zeta6 sage: chi. values() [0, 1, zeta6 – 1, 0, -zeta6, -zeta6 + 1, 0, 0, 1, 0, zeta6, -zeta6, 0, -1, 0, 0, zeta6 – 1, zeta6, 0, -zeta6 + 1, -1] sage: chi. conductor() 7 sage: chi. modulus() 21 sage: chi. order() 6 sage: chi(19) -zeta6 + 1 sage: chi(40) -zeta6 + 1 It is also possible to compute the action of the Galois group Gal(Q(? N )/Q) on these characters, as well as the direct product decomposition corresponding to the factorization of the modulus. sage: chi. alois_orbit() [Dirichlet character modulo 21 of conductor 7 mapping 8 |–> 1, 10 |–> zeta6, 2. 13. Some More Advanced Mathematics 45 Sage Tutorial, Release 5. 3 Dirichlet character modulo 21 of conductor 7 mapping 8 |–> 1, 10 |–> -zeta6 + 1] sage: go = G. galois_orbits() sage: [len(orbit) for orbit in go] [1, 2, 2, 1, 1, 2, 2, 1] sage: [ Group 6 and Group 6 and ] G. decomposition() of Dirichlet char acters of modulus 3 over Cyclotomic Field of order degree 2, of Dirichlet characters of modulus 7 over Cyclotomic Field of order degree 2 Next, we construct the group of Dirichlet characters mod 20, but with values n Q(i): sage: sage: sage: Group K. = NumberField(x^2+1) G = DirichletGroup(20,K) G of Dirichlet characters of modulus 20 over Number Field in i with defining polynomial x^2 + 1 We next compute several invariants of G: sage: G. gens() (Dirichlet character modulo 20 of conductor 4 mapping 11 |–> -1, 17 |–> 1, Dirichlet character modulo 20 of conductor 5 mapping 11 |–> 1, 17 |–> i) sage: G. unit_gens() [11, 17] sage: G. zeta() i sage: G. zeta_order() 4 In this example we create a Dirichlet character with values in a number ? eld. We explicitly specify the choice of root of unity by the third argument to DirichletGroup below. age: x = polygen(QQ, ’x’) sage: K = NumberField(x^4 + 1, ’a’); a = K. 0 sage: b = K. gen(); a == b True sage: K Number Field in a with defining polynomial x^4 + 1 sage: G = DirichletGroup(5, K, a); G Group of Dirichlet characters of modulus 5 over Number Field in a with defining polynomial x^4 + 1 sage: chi = G. 0; chi Dirichlet character modulo 5 of conductor 5 mapping 2 |–> a^2 sage: [(chi^i)(2) for i in range(4)] [1, a^2, -1, -a^2] Here NumberField(x^4 + 1, ’a’) tells Sage to use the symbol â€Å"a† in printing what K is (a Number Field in a with de? ning polynomial x4 + 1). The name â€Å"a† is undeclared at this point. Once a = K. 0 (or equivalently a = K. gen()) is evaluated, the symbol â€Å"a† represents a root of the generating polynomial x4 + 1. 46 Chapter 2. A Guided Tour Sage Tutorial, Release 5. 3 2. 13. 4 Modular Forms Sage can do some computations related to modular forms, including dimensions, computing spaces of modular symbols, Hecke operators, and decompositions. There are several functions available for computing dimensions of spaces of modular forms. For example, sage: dimension_cusp_forms(Gamma0(11),2) 1 sage: dimension_cusp_forms(Gamma0(1),12) 1 sage: dimension_cusp_forms(Gamma1(389),2) 6112 Next we illustrate computation of Hecke operators on a space of modular symbols of level 1 and weight 12. sage: M = ModularSymbols(1,12) sage: M. basis() ([X^8*Y^2,(0,0)], [X^9*Y,(0,0)], [X^10,(0,0)]) sage: t2 = M. T(2) sage: t2 Hecke operator T_2 on Modular Symbols space of dimension 3 for Gamma_0(1) of weight 12 with sign 0 over Rational Field sage: t2. matrix() [ -24 0 0] [ 0 -24 0] [4860 0 2049] sage: f = t2. charpoly(’x’); f x^3 – 2001*x^2 – 97776*x – 1180224 sage: factor(f) (x – 2049) * (x + 24)^2 sage: M. T(11). charpoly(’x’). factor() (x – 285311670612) * (x – 534612)^2 We can also create spaces for ? 0 (N ) and ? 1 (N ). sage: ModularSymbols(11,2) Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field sage: ModularSymbols(Gamma1(11),2) Modular Symbols space of dimension 11 for Gamma_1(11) of weight 2 with sign 0 and over Rational Field Let’s compute some characteristic polynomials and q-expansions. sage: M = ModularSymbols(Gamma1(11),2) sage: M. T(2). charpoly(’x’) x^11 – 8*x^10 + 20*x^9 + 10*x^8 – 145*x^7 + 229*x^6 + 58*x^5 – 360*x^4 + 70*x^3 – 515*x^2 + 1804*x – 1452 sage: M. T(2). charpoly(’x’). actor() (x – 3) * (x + 2)^2 * (x^4 – 7*x^3 + 19*x^2 – 23*x + 11) * (x^4 – 2*x^3 + 4*x^2 + 2*x + 11) sage: S = M. cuspidal_submodule() sage: S. T(2). matrix() [-2 0] [ 0 -2] sage: S. q_expansion_basis(10) [ q – 2*q^2 – q^3 + 2*q^4 + q^5 + 2*q^6 – 2*q^7 – 2*q^9 + O(q^10) ] 2. 13. Some More A dvanced Mathematics 47 Sage Tutorial, Release 5. 3 We can even compute spaces of modular symbols with character. sage: G = DirichletGroup(13) sage: e = G. 0^2 sage: M = ModularSymbols(e,2); M Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2 sage: M. T(2). charpoly(’x’). factor() (x – 2*zeta6 – 1) * (x – zeta6 – 2) * (x + zeta6 + 1)^2 sage: S = M. cuspidal_submodule(); S Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2 sage: S. T(2). charpoly(’x’). factor() (x + zeta6 + 1)^2 sage: S. q_expansion_basis(10) [ q + (-zeta6 – 1)*q^2 + (2*zeta6 – 2)*q^3 + zeta6*q^4 + (-2*zeta6 + 1)*q^5 + (-2*zeta6 + 4)*q^6 + (2*zeta6 – 1)*q^8 – zeta6*q^9 + O(q^10) ] Here is another example of how Sage can compute the action of Hecke operators on a space of modular forms. sage: T = ModularForms(Gamma0(11),2) sage: T Modular Forms space of dimension 2 for Congruence Subgroup Gamma0(11) of weight 2 over Rational Field sage: T. degree() 2 sage: T. level() 11 sage: T. group() Congruence Subgroup Gamma0(11) sage: T. dimension() 2 sage: T. cuspidal_subspace() Cuspidal subspace of dimension 1 of Modular Forms space of dimension 2 for Congruence Subgroup Gamma0(11) of weight 2 over Rational Field sage: T. isenstein_subspace() Eisenstein subspace of dimension 1 of Modular Forms space of dimension 2 for Congruence Subgroup Gamma0(11) of weight 2 over Rational Field sage: M = ModularSymbols(11); M Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field sage: M. weight() 2 sage: M. basis() ((1,0), (1,8), (1,9)) sage: M. sign() 0 Let Tp denote the usual Hecke operators (p prime). How do the Hecke operators T2 , T3 , T5 act on the space of modular symbols? sage: M. T(2). matrix() [ 3 0 -1] [ 0 -2 0] [ 0 0 -2] sage: M. T(3). matrix() [ 4 0 -1] 8 Chapter 2. A Guided Tour Sage Tutorial, Release 5. 3 [ 0 -1 0] [ 0 0 -1] sage: M. T(5). matrix() [ 6 0 -1] [ 0 1 0] [ 0 0 1] 2. 13. Some More Advanced Mathematics 49 Sage Tutorial, Release 5. 3 50 Chapter 2. A Guided Tour CHAPTER THREE THE INTERACTIVE SHELL In most of this tutorial, we assume you start the Sage interpreter using the sage command. This starts a customized version of the IPython shell, and imports many functions and classes, so they are ready to use from the command prompt. Further customization is possible by editing the $SAGE_ROOT/ipythonrc ? le. Upon starting Sage, you get output similar to the following: ———————————————————————| SAGE Version 3. 1. 1, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ———————————————————————- sage: To quit Sage either press Ctrl-D or type quit or exit. sage: quit Exiting SAGE (CPU time 0m0. 00s, Wall time 0m0. 89s) The wall time is the time that elapsed on the clock hanging from your wall. This is relevant, since CPU time does not track time used by subprocesses like GAP or Singular. Avoid killing a Sage process with kill -9 from a terminal, since Sage might not kill child processes, e. g. , Maple processes, or cleanup temporary ? les f rom $HOME/. sage/tmp. ) 3. 1 Your Sage Session The session is the sequence of input and output from when you start Sage until you quit. Sage logs all Sage input, via IPython. In fact, if you’re using the interactive shell (not the notebook interface), then at any point you may type %history (or %hist) to get a listing of all input lines typed so far. You can type ? at the Sage prompt to ? nd out more about IPython, e. g. â€Å"IPython offers numbered prompts with input and output caching. All input is saved and can be retrieved as variables (besides the usual arrow key recall). The following GLOBAL variables always exist (so don’t overwrite them! )†: _: previous input (interactive shell and notebook) __: next previous input (interactive shell only) _oh : list of all inputs (interactive shell only) Here is an example: sage: factor(100) _1 = 2^2 * 5^2 sage: kronecker_symbol(3,5) 51 Sage Tutorial, Release 5. 3 _2 = -1 sage: %hist #This only works from the interacti ve shell, not the notebook. : factor(100) 2: kronecker_symbol(3,5) 3: %hist sage: _oh _4 = {1: 2^2 * 5^2, 2: -1} sage: _i1 _5 = ’factor(ZZ(100)) ’ sage: eval(_i1) _6 = 2^2 * 5^2 sage: %hist 1: factor(100) 2: kronecker_symbol(3,5) 3: %hist 4: _oh 5: _i1 6: eval(_i1) 7: %hist We omit the output numbering in the rest of this tutorial and the other Sage documentation. You can also store a list of input from session in a macro for that session. sage: E = EllipticCurve([1,2,3,4,5]) sage: M = ModularSymbols(37) sage: %hist 1: E = EllipticCurve([1,2,3,4,5]) 2: M = ModularSymbols(37) 3: %hist sage: %macro em 1-2 Macro ‘em‘ created. To execute, type its name (without quotes). sage: E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field sage: E = 5 sage: M = None sage: em Executing Macro sage: E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field When using the interactive shell, any UNIX shell command can be executed from Sage by prefacing it by an exclamation point !. For example, sage: ! ls auto example. sage glossary. tex t tmp tut. log tut. tex returns the listing of the current directory. The PATH has the Sage bin directory at the front, so if you run gp, gap, singular, maxima, etc. you get the versions included with Sage. sage: ! gp Reading GPRC: /etc/gprc Done. GP/PARI CALCULATOR Version 2. 2. 11 (alpha) i686 running linux (ix86/GMP-4. 1. 4 kernel) 32-bit version 52 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 sage: ! singular SINGULAR A Computer Algebra System for Polynomial Computations 0< by: G. -M. Greuel, G. Pfister, H . Schoenemann FB Mathematik der Universitaet, D-67653 Kaiserslautern October 2005 / / Development version 3-0-1 3. 2 Logging Input and Output Logging your Sage session is not the same as saving it (see Saving and Loading Complete Sessions for that). To log input (and optionally output) use the logstart command. Type logstart? for more details. You can use this command to log all input you type, all output, and even play back that input in a future session (by simply reloading the log ? le). [email  protected]:~$ sage ———————————————————————| SAGE Version 3. 0. 2, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ———————————————————————sage: logstart setup Activating auto-logging. Current session state plus future input saved. Filename : setup Mode : backup Output logging : False Timestamping : False State : active sage: E = EllipticCurve([1,2,3,4,5]). minimal_model() sage: F = QQ^3 sage: x,y = QQ[’x,y’]. gens() sage: G = E. gens() sage: Exiting SAGE (CPU time 0m0. 61s, Wall time 0m50. 39s). [email  protected]:~$ sage ———————————————————————| SAGE Version 3. 0. 2, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ———————————————————————sage: load â€Å"setup† Loading log file one line at a time Finished replaying log file sage: E Elliptic Curve defined by y^2 + x*y = x^3 – x^2 + 4*x + 3 over Rational Field sage: x*y x*y sage: G [(2 : 3 : 1)] If you use Sage in the Linux KDE terminal konsole then you can save your session as follows: after starting Sage in konsole, select â€Å"settings†, then â€Å"history †, then â€Å"set unlimited†. When you are ready to save your session, select â€Å"edit† then â€Å"save history as † and type in a name to save the text of your session to your computer. After saving this ? le, you could then load it into an editor, such as xemacs, and print it. 3. 2. Logging Input and Output 53 Sage Tutorial, Release 5. 3 3. Paste Ignores Prompts Suppose you are reading a session of Sage or Python computations and want to copy them into Sage. But there are annoying >>> or sage: prompts to worry about. In fact, you can copy and paste an example, including the prompts if you want, into Sage. In other words, by de fault the Sage parser strips any leading >>> or sage: prompt before passing it to Python. For example, sage: 2^10 1024 sage: sage: sage: 2^10 1024 sage: >>> 2^10 1024 3. 4 Timing Commands If you place the %time command at the beginning of an input line, the time the command takes to run will be displayed after the output. For example, we can compare the running time for a certain exponentiation operation in several ways. The timings below will probably be much different on your computer, or even between different versions of Sage. First, native Python: sage: %time a = int(1938)^int(99484) CPU times: user 0. 66 s, sys: 0. 00 s, total: 0. 66 s Wall time: 0. 66 This means that 0. 66 seconds total were taken, and the â€Å"Wall time†, i. e. , the amount of time that elapsed on your wall clock, is also 0. 66 seconds. If your computer is heavily loaded with other programs, the wall time may be much larger than the CPU time. Next we time exponentiation using the native Sage Integer type, which is implemented (in Cython) using the GMP library: sage: %time a = 1938^99484 CPU times: user 0. 04 s, sys: 0. 00 s, total: 0. 04 s Wall time: 0. 04 Using the PARI C-library interface: sage: %time a = pari(1938)^pari(99484) CPU times: user 0. 05 s, sys: 0. 00 s, total: 0. 05 s Wall time: 0. 05 GMP is better, but only slightly (as expected, since the version of PARI built for Sage uses GMP for integer arithmetic). You can also time a block of commands using the cputime command, as illustrated below: sage: sage: sage: sage: sage: 0. 4 t = cputime() a = int(1938)^int(99484) b = 1938^99484 c = pari(1938)^pari(99484) cputime(t) # somewhat random output sage: cputime? Return the time in CPU second since SAGE started, or with optional argument t, return the time since time t. 54 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 INPUT: t — (optional) float, time in CPU seconds OUTPUT: float — time i n CPU seconds The walltime command behaves just like the cputime command, except that it measures wall time. We can also compute the above power in some of the computer algebra systems that Sage includes. In each case we execute a trivial command in the system, in order to start up the server for that program. The most relevant time is the wall time. However, if there is a signi? cant difference between the wall time and the CPU time then this may indicate a performance issue worth looking into. sage: time 1938^99484; CPU times: user 0. 01 s, sys: 0. 00 s, total: Wall time: 0. 01 sage: gp(0) 0 sage: time g = gp(’1938^99484’) CPU times: user 0. 00 s, sys: 0. 00 s, total: Wall time: 0. 04 sage: maxima(0) 0 sage: time g = maxima(’1938^99484’) CPU times: user 0. 00 s, sys: 0. 00 s, total: Wall time: 0. 0 sage: kash(0) 0 sage: time g = kash(’1938^99484’) CPU times: user 0. 00 s, sys: 0. 00 s, total: Wall time: 0. 04 sage: mathematica(0) 0 sage: time g = mathematica(’1938^99484’) CPU times: user 0. 00 s, sys: 0. 00 s, total: Wall time: 0. 03 sage: maple(0) 0 sage: time g = maple(’1938^99484’) CPU times: user 0. 00 s, sys: 0. 00 s, total: Wall time: 0. 11 sage: gap(0) 0 sage: time g = gap. eval(’1938^99484;;’) CPU times: user 0. 00 s, sys: 0. 00 s, total: Wall time: 1. 02 0. 01 s 0. 00 s 0. 00 s 0. 00 s 0. 00 s 0. 00 s 0. 00 s Note that GAP and Maxima are the slowest in this test (this was run on the machine sage. ath. washington. edu). Because of the pexpect interface overhead, it is perhaps unfair to compare these to Sage, which is the fastest. 3. 5 Other IPython tricks As noted above, Sage uses IPython as its front end, and so you can use any of IPython’s commands and features. You can read the full IPython documentation. Meanwhile, here are some fun tricks – these are called â€Å"Magic commands† in IPython: †¢ You can use %bg to run a command in the background, and then use jobs to access the results, as follows. 3. 5. Other IPython tricks 55 Sage Tutorial, Release 5. 3 The comments not tested are here because the %bg syntax doesn’t work well with S age’s automatic testing facility. If you type this in yourself, it should work as written. This is of course most useful with commands which take a while to complete. ) sage: def quick(m): return 2*m sage: %bg quick(20) # not tested Starting job # 0 in a separate thread. sage: jobs. status() # not tested Completed jobs: 0 : quick(20) sage: jobs[0]. result # the actual answer, not tested 40 Note that jobs run in the background don’t use the Sage preparser – see The Pre-Parser: Differences between Sage and Python for more information. One (perhaps awkward) way to get around this would be to run sage: %bg eval(preparse(’quick(20)’)) # not tested It is safer and easier, though, to just use %bg on commands which don’t require the preparser. †¢ You can use %edit (or %ed or ed) to open an editor, if you want to type in some complex code. Before you start Sage, make sure that the EDITOR environment variable is set to your favorite editor (by putting export EDITOR=/usr/bin/emacs or export EDITOR=/usr/bin/vim or something similar in the appropriate place, like a . profile ? le). From the Sage prompt, executing %edit will open up the named editor. Then within the editor you can de? e a function: def some_function(n): return n**2 + 3*n + 2 Save and quit from the editor. For the rest of your Sage session, you can then use some_function. If you want to modify it, type %edit some_function from the Sage prompt. †¢ If you have a computation and you want to modify its output for another use, perform the computation and type %rep: this will place the output from the previous command at the Sage prompt, ready for you to edit it. sage: f(x) = cos(x) sage: f(x). derivative(x) -sin(x) At this point, if you type %rep at the Sage prompt, you will get a new Sage prompt, followed by -sin(x), with the cursor at the end of the line. For more, type %quickref to get a quick reference guide to IPython. As of this writing (April 2011), Sage uses version 0. 9. 1 of IPython, and the documentation for its magic commands is available online. 3. 6 Errors and Exceptions When something goes wrong, you will usually see a Python â€Å"exception†. Python even tries to suggest what raised the exception. Often you see the name of the exception, e. g. , NameError or ValueError (see the Python Reference Manual [Py] for a complete list of exceptions). For example, sage: 3_2 ———————————————————–File â€Å"†, line 1 ZZ(3)_2 ^ SyntaxError: invalid syntax 6 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 sage: EllipticCurve([0,infinity]) ———————————————— Ã¢â‚¬â€Ã¢â‚¬â€Ã¢â‚¬â€œTraceback (most recent call last): TypeError: Unable to coerce Infinity () to Rational The interactive debugger is sometimes useful for understanding what went wrong. You can toggle it on or off using %pdb (the default is off). The prompt ipdb> appears if an exception is raised and the debugger is on. From within the debugger, you can print the state of any local variable, and move up and down the execution stack. For example, sage: %pdb Automatic pdb calling has been turned ON sage: EllipticCurve([1,infinity]) ————————————————————————– Traceback (most recent call last) ipdb> For a list of commands in the debugger, type ? at the ipdb> prompt: ipdb> ? Documented commands (type help ): ======================================== EOF break commands debug h a bt condition disable help alias c cont down ignore args cl continue enable j b clear d exit jump whatis where Miscellaneous help topics: ========================== exec pdb Undocumented commands: ====================== retval rv list n next p pdef pdoc pinfo pp q quit r return s step tbreak u unalias up w Type Ctrl-D or quit to return to Sage. 3. 7 Reverse Search and Tab Completion Reverse search: Type the beginning of a command, then Ctrl-p (or just hit the up arrow key) t o go back to each line you have entered that begins in that way. This works even if you completely exit Sage and restart later. You can also do a reverse search through the history using Ctrl-r. All these features use the readline package, which is available on most ? avors of Linux. To illustrate tab completion, ? st create the three dimensional vector space V = Q3 as follows: sage: V = VectorSpace(QQ,3) sage: V Vector space of dimension 3 over Rational Field You can also use the following more concise notation: 3. 7. Reverse Search and Tab Completion 57 Sage Tutorial, Release 5. 3 sage: V = QQ^3 Then it is easy to list all member functions for V using tab completion. Just type V. , then type the [tab key] key on your keyboard: sage: V. [tab key] V. _VectorSpace_generic__base_field V. ambient_space V. base_field V. base_ring V. basis V. coordinates V. zero_vector If you type the ? st few letters of a function, then [tab key], you get only functions that begin as indicated. sage: V. i[tab key] V. is_ambient V. is_dense V. is_full V. is_sparse If you wonder what a particular function does, e. g. , the coordinates function, type V. coordinates? for help or V. coordinates for the source code, as explained in the next section. 3. 8 Integrated Help System Sage features an integrated help facility. Type a function name followed by ? for the documentation for that function. sage: V = QQ^3 sage: V. coordinates? Type: instancemethod Base Class: String Form: Namespace: Interactive File: /home/was/s/local/lib/python2. /site-packages/sage/modules/f ree_module. py Definition: V. coordinates(self, v) Docstring: Write v in terms of the basis for self. Returns a list c such that if B is the basis for self, then sum c_i B_i = v. If v is not in self, raises an ArithmeticError exception. EXAMPLES: sage: M = FreeModule(IntegerRing(), 2); M0,M1=M. gens() sage: W = M. submodule([M0 + M1, M0 – 2*M1]) sage: W. coordinates(2*M0-M1) [2, -1] As shown above, the output tells you t he type of the object, the ? le in which it is de? ned, and a useful description of the function with examples that you can paste into your current session. Almost all of these examples are regularly automatically tested to make sure they work and behave exactly as claimed. 58 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 Another feature that is very much in the spirit of the open source nature of Sage is that if f is a Python function, then typing f displays the source code that de? nes f. For example, sage: V = QQ^3 sage: V. coordinates Type: instancemethod Source: def coordinates(self, v): â€Å"†Ã¢â‚¬  Write $v$ in terms of the basis for self. â€Å"†Ã¢â‚¬  return self. coordinate_vector(v). list() This tells us that all the coordinates function does is call the coordinate_vector function and change the result into a list. What does the coordinate_vector function do? sage: V = QQ^3 sage: V. coordinate_vector def coordinate_vector(self, v): return self. ambient_vector_space()(v) The coordinate_vector function coerces its input into the ambient space, which has the effect of computing the vector of coef? cients of v in terms of V . The space V is already ambient since it’s just Q3 . There is also a coordinate_vector function for subspaces, and it’s different. We create a subspace and see: sage: V = QQ^3; W = V. span_of_basis([V. 0, V. 1]) sage: W. coordinate_vector def coordinate_vector(self, v): â€Å"†Ã¢â‚¬  â€Å"†Ã¢â‚¬  # First find the coordinates of v wrt echelon basis. w = self. echelon_coordinate_vector(v) # Next use transformation matrix from echelon basis to # user basis. T = self. echelon_to_user_matrix() return T. linear_combination_of_rows(w) (If you think the implementation is inef? cient, please sign up to help optimize linear algebra. ) You may also type help(command_name) or help(class) for a manpage-like help ? le about a given class. age: help(VectorSpace) Help on class VectorSpace class VectorSpace(__builtin__. object) | Create a Vector Space. | | To create an ambient space over a field with given dimension | using the calling syntax : : When you type q to exit the help system, your session appears just as it was. The help listing does not clutter up your session, unlike the output of function_name? som etimes does. It’s particularly helpful to type 3. 8. Integrated Help System 59 Sage Tutorial, Release 5. 3 help(module_name). For example, vector spaces are de? ned in sage. modules. free_module, so type help(sage. modules. ree_module) for documentation about that whole module. When viewing documentation using help, you can search by typing / and in reverse by typing ?. 3. 9 Saving and Loading Individual Objects Suppose you compute a matrix or worse, a complicated space of modular symbols, and would like to save it for later use. What can you do? There are several approaches that computer algebra systems take to saving individual objects. 1. Save your Game: Only support saving and loading of complete sessions (e. g. , GAP, Magma). 2. Uni? ed Input/Output: Make every object print in a way that can be read back in (GP/PARI). 3. Eval: Make it easy to evaluate arbitrary code in the interpreter (e. g. , Singular, PARI). Because Sage uses Python, it takes a different approach, which is that every object can be serialized, i. e. , turned into a string from which that object can be recovered. This is in spirit similar to the uni? ed I/O approach of PARI, except it doesn’t have the drawback that objects print to screen in too complicated of a way. Also, support for saving and loading is (in most cases) completely automatic, requiring no extra programming; it’s simply a feature of Python that was designed into the language from the ground up. Almost all Sage objects x can be saved in compressed form to disk using save(x, filename) (or in many cases x. save(filename)). To load the object back in, use load(filename). sage: sage: [ 15 [ 42 [ 69 sage: A = MatrixSpace(QQ,3)(range(9))^2 A 18 21] 54 66] 90 111] save(A, ’A’) You should now quit Sage and restart. Then you can get A back: sage: sage: [ 15 [ 42 [ 69 A = load(’A’) A 18 21] 54 66] 90 111] You can do the same with more complicated objects, e. g. , elliptic curves. All data about the object that is cached is stored with the object. For example, sage: sage: sage: sage: E = EllipticCurve(’11a’) v = E. nlist(100000) save(E, ’E’) quit # takes a while The saved version of E takes 153 kilobytes, since it stores the ? rst 100000 an with it. ~/tmp$ ls -l E. sobj -rw-r–r– 1 was was 153500 2006-01-28 19:23 E. sobj ~/tmp$ sage [ ] sage: E = load(’E’) sage: v = E. anlist(100000) # instant! (In Pytho n, saving and loading is accomplished using the cPickle module. In particular, a Sage object x can be saved via cPickle. dumps(x, 2). Note the 2! ) 60 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 Sage cannot save and load individual objects created in some other computer algebra systems, e. . , GAP, Singular, Maxima, etc. They reload in a state marked â€Å"invalid†. In GAP, though many objects print in a form from which they can be reconstructed, many don’t, so reconstructing from their print representation is purposely not allowed. sage: a = gap(2) sage: a. save(’a’) sage: load(’a’) Traceback (most recent call last): ValueError: The session in which this object was defined is no longer running. GP/PARI objects can be saved and loaded since their print representation is enough to reconstruct them. sage: a = gp(2) sage: a. save(’a’) sage: load(’a’) 2 Saved objects can be re-loaded later on computers with different architectures or operating systems, e. g. , you could save a huge matrix on 32-bit OS X and reload it on 64-bit Linux, ? nd the echelon form, then move it back. Also, in many cases you can even load objects into versions of Sage that are different than the versions they were saved in, as long as the code for that object isn’t too different. All the attributes of the objects are saved, along with the class (but not source code) that de? nes the object. If that class no longer exists in a new version of Sage, then the object can’t be reloaded in that newer version. But you could load it in an old version, get the objects dictionary (with x. __dict__), and save the dictionary, and load that into the newer version. 3. 9. 1 Saving as Text You can also save the ASCII text representation of objects to a plain text ? le by simply opening a ? le in write mode and writing the string representation of the object (you can write many objects this way as well). When you’re done writing objects, close the ? le. sage: sage: sage: sage: sage: R. = PolynomialRing(QQ,2) f = (x+y)^7 o = open(’file. txt’,’w’) o. write(str(f)) o. close() 3. 10 Saving and Loading Complete Sessions Sage has very ? xible support for saving and loading complete sessions. The command save_session(sessionname) saves all the variables you’ve de? ned in the current session as a dictionary in the given sessionname. (In the rare case when a variable does not support saving, it is simply not saved to the dictionary. ) The resulting ? le is an . sobj ? le and can be loaded just like any other object that was saved. When you load the objects saved in a session, you get a dictionary whose keys are the variables names and whose values are the objects. You can use the load_session(sessionname) command to load the variables de? ed in sessionname into the current session. Note that this does not wipe out variables you’ve already de? ned in your current session; instead, the two sessions are merged. First we start Sage and de? ne some variables. 3. 10. Saving and Loading Complete Sessions 61 Sage Tutorial, Release 5. 3 sage: sage: sage: sage: _4 = E = EllipticCurve(’11a’) M = ModularSymbols(37) a = 389 t = M. T(2003). matrix(); t. charpoly(). factor() (x – 2004) * (x – 12)^2 * (x + 54)^2 Next we save our session, which saves each of the above variables into a ? le. Then we view the ? le, which is about 3K in size. age: save_session(’misc’) Saving a Saving M Saving t Saving E sage: quit [ email  protected]:~/tmp$ ls -l misc. sobj -rw-r–r– 1 was was 2979 2006-01-28 19:47 misc. sobj Finally we restart Sage, de? ne an extra variable, and load our saved session. sage: b = 19 sage: load_session(’misc’) Loading a Loading M Loading E Loading t Each saved variable is again available. Moreover, the variable b was not overwritten. sage: M Full Modular Symbols space for Gamma_0(37) of weight 2 with sign 0 and dimension 5 over Rational Field sage: E Elliptic Curve defined by y^2 + y = x^3 – x^2 – 10*x – 20 over Rational Field sage: b 19 sage: a 389 3. 1 The Notebook Interface The Sage notebook is run by typing sage: notebook() on the command line of Sage. This starts the Sage notebook and opens your default web browser to view it. The server’s state ? les are stored in $HOME/. sage/sage\_notebook. Other options include: sage: notebook(â€Å"directory†) which starts a new notebook server using ? les in the given dir ectory, instead of the default directory $HOME/. sage/sage_notebook. This can be useful if you want to have a collection of worksheets associated with a speci? c project, or run several separate notebook servers at the same time. When you start the notebook, it ? st creates the following ? les in $HOME/. sage/sage_notebook: 62 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 nb. sobj objects/ worksheets/ (the notebook SAGE object file) (a directory containing SAGE objects) (a directory containing SAGE worksheets). After creating the above ? les, the notebook starts a web server. A â€Å"notebook† is a collection of user accounts, each of which can have any number of worksheets. When you create a new worksheet, the data that de? nes it is stored in the worksheets/username/number directories. In each such directory there is a plain text ? le worksheet. xt – if anything ever happens to your worksheets, or Sage, or whatever, that human-readable ? le contains ev erything needed to reconstruct your worksheet. From within Sage, type notebook? for much more about how to start a notebook server. The following diagram illustrates the architecture of the Sage Notebook: ———————| | | | | firefox/safari | | | | javascript | | program | | | | | ———————| ^ | AJAX | V | ———————| | | sage | | web | ————> | server | pexpect | | | | ———————- SAGE process 1 SAGE process 2 SAGE process 3 (Python processes) For help on a Sage command, cmd, in the notebook browser box, type cmd? ). and now hit (not For help on the keyboard shortcuts available in the notebook interface, click on the Help link. 3. 11. The Notebook Interface 63 Sage Tutorial, Release 5. 3 64 Chapter 3. The Interactive Shell CHAPTER FOUR INTERFACES A central facet of Sage is that it supports computation with objects in many different computer algebra systems â€Å"under one roof† using a common interface and clean programming language. The console and interact methods of an interface do very different things. For example, using GAP as an example: 1. gap. onsole(): This opens the GAP console – it transfers control to GAP. Here Sage is serving as nothing more than a convenient program launcher, similar to the Linux bash shell. 2. gap. interact(): This is a convenient way to interact with a running GAP instance that may be â€Å"full of† Sage objects. You can import Sage objects into this GAP session (even from the interactive interface), etc. 4. 1 GP/PARI PARI is a compact, very mature, highly optimized C program whose primary focus is number theory. There are two very distinct interfaces that you can use in Sage: †¢ gp – the â€Å"G o P ARI† interpreter, and †¢ pari – the PARI C libraxry. For example, the following are two ways of doing the same thing. They look identical, but the output is actually different, and what happens behind the scenes is drastically different. sage: gp(’znprimroot(10007)’) Mod(5, 10007) sage: pari(’znprimroot(10007)’) Mod(5, 10007) In the ? rst case, a separate copy of the GP interpreter is started as a server, and the string ’znprimroot(10007)’ is sent to it, evaluated by GP, and the result is assigned to a variable in GP (which takes up space in the child GP processes memory that won’t be freed). Then the value of that variable is displayed. In the second case, no separate program is started, and the string ’znprimroot(10007)’ is evaluated by a certain PARI C library function. The result is stored in a piece of memory on the Python heap, which is freed when the variable is no longer referenced. The objects have different types: sage: type(gp(’znprimroot(10007)’)) sage: type(pari(’znprimroot(10007)’)) So which should you use? It depends on what you’re doing. The GP interface can do absolutely anything you could do in the usual GP/PARI command line program, since it is running that program. In particular, you can load complicated PARI programs and run them. In contrast, the PARI interface (via the C library) is much more restrictive. First, not all 65 Sage Tutorial, Release 5. 3 member functions have been implemented. Second, a lot of code, e. g. , involving numerical integration, won’t work via the PARI interface. That said, the PARI interface can be signi? cantly faster and more robust than the GP one. (If the GP interface runs out of memory evaluating a given input line, it will silently and automatically double the stack size and retry that input line. Thus your computation won’t crash if you didn’t correctly anticipate the amount of memory that would be needed. This is a nice trick the usual GP interpreter doesn’t seem to provide. Regarding the PARI C library interface, it immediately copies each created object off of the PARI stack, hence the stack never grows. However, each object must not exceed 100MB in size, or the stack will over? ow when the object is being created. This extra copying does impose a slight performance penalty. ) In summary, Sage uses the PARI C library to provide functionality similar to that provided by the GP/PARI interpreter, except with different sophisticated memory management and the Python programming language. First we create a PARI list from a Python list. age: v = pari([1,2,3,4,5]) sage: v [1, 2, 3, 4, 5] sage: type(v) Every PARI object is of type py_pari. gen. The PARI type of the underlying object can be obtained using the type member function. sage: v. type() ’t_VEC’ In PARI, to create an elliptic curve we enter ellinit([1,2,3,4,5]). Sage is similar, except that ellinit is a method th at can be called on any PARI object, e. g. , our t\_VEC v. sage: e = v. ellinit() sage: e. type() ’t_VEC’ sage: pari(e)[:13] [1, 2, 3, 4, 5, 9, 11, 29, 35, -183, -3429, -10351, 6128487/10351] Now that we have an elliptic curve object, we can compute some things about it. age: e. elltors() [1, [], []] sage: e. ellglobalred() [10351, [1, -1, 0, -1], 1] sage: f = e. ellchangecurve([1,-1,0,-1]) sage: f[:5] [1, -1, 0, 4, 3] 4. 2 GAP Sage comes with GAP 4. 4. 10 for computational discrete mathematics, especially group theory. Here’s an example of GAP’s IdGroup function, which uses the optional small groups database that has to be installed separately, as explained below. sage: G = gap(’Group((1,2,3)(4,5), (3,4))’) sage: G Group( [ (1,2,3)(4,5), (3,4) ] ) sage: G. Center() Group( () ) 66 Chapter 4. Interfaces Sage Tutorial, Release 5. 3 sage: G. IdGroup() [ 120, 34 ] sage: G. Order() 120 # requires optional database_gap package We can do the same computation in Sage without explicitly invoking the GAP interface as follows: sage: G = PermutationGroup([[(1,2,3),(4,5)],[(3,4)]]) sage: G. center() Subgroup of (Permutation Group with generators [(3,4), (1,2,3)(4,5)]) generated by [()] sage: G. group_id() # requires optional database_gap package [120, 34] sage: n = G. order(); n 120 (For some GAP functionality, you should install two optional Sage packages. Type sage -optional for a list and choose the one that looks like gap\_packages-x. . z, then type sage -i gap\_packages-x. y. z. Do the same for database\_gap-x. y. z. Some non-GPL’d GAP packages may be installed by downloading them from the GAP web site [GAPkg], and unpacking them in $SAGE_ROOT/local/lib/gap-4. 4. 10/pkg. ) 4. 3 Singular Singular provides a massive and mature library for Grobner bases, multivariate polynomial gcds, bases of RiemannRoch spaces of a plane curve, and factorizations, among other things. We illustrate multivariate polynomial factorization using the Sage interface to Singular (do not type the ): sage: R1 = singular. ing(0, ’(x,y)’, ’dp’) sage: R1 // characteristic : 0 // number of vars : 2 // block 1 : ordering dp // : names x y // block 2 : ordering C sage: f = singular(’9*y^8 – 9*x^2*y^7 – 18*x^3*y^6 – 18*x^5*y^6 + 9*x^6*y^4 + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 – 18*x^11*y^2 – 9*x^12*y^3 – 18*x^13*y^2 + 9*x^16’) Now that we have de? ned f , we print it and factor. sage: f 9*x^16-18*x^13*y^2-9*x^12*y^3+9*x^10*y^4-18*x^11*y^2+36*x^8*y^4+18*x^7*y^5-18*x^5*y^6+9*x^6*y^4-18*x^ sage: f. parent() Singular sage: F = f. factorize(); F [1]: _[1]=9 _[2]=x^6-2*x^3*y^2-x^2*y^3+y^4 _[3]=-x^5+y^2 [2]: 1,1,2 sage: F[1][2] x^6-2*x^3*y^2-x^2*y^3+y^4 As with the GAP example in GAP, we can compute the above factorization without explicitly using the Singular interface (however, behind the scenes Sage uses the Singular interface for the actual computation). Do not type the : 4. 3. Singular 67 Sage Tutorial, Release 5. 3 sage: sage: sage: (9) * x, y = QQ[’x, y’]. gens() f = 9*y^8 – 9*x^2*y^7 – 18*x^3*y^6 – 18*x^5*y^6 + 9*x^6*y^4 + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 – 18*x^11*y^2 – 9*x^12*y^3 – 18*x^13*y^2 + 9*x^16 factor(f) (-x^5 + y^2)^2 * (x^6 – 2*x^3*y^2 – x^2*y^3 + y^4) 4. 4 Maxima Maxima is included with Sage, as well as a Lisp implementation. The gnuplot package (which Maxima uses by default for plotting) is distributed as a Sage optional package. Among other things, Maxima does symbolic manipulation. Maxima can integrate and differentiate functions symbolically, solve 1st order ODEs, most linear 2nd order ODEs, and has implemented the Laplace tr